复杂的Django过滤,其中filter参数涉及比较两个不同的外键模型

时间:2017-08-24 11:03:53

标签: python django django-models filtering models

使用以下模型,设想五个容量实例,每个容量实例与每个用户和每个问题实例相关联,为每个问题的每个容量提供独立的question_capacity_value,为每个用户的每个容量提供user_capacity_value。

我想生成一个Question实例的查询集,并将其过滤为只留下Question实例,其中每个容量的关联question_capacity_value小于与该问题关联的每个容量实例中的user_capacity_value。

换句话说,每个问题将有5个question_capacity值,用户将有5个user_capacity值,我想排除问题,对于每个容量,question_capacity_values小于user_capacity_value。

class Question(models.Model):

    question = models.CharField(max_length=200, blank=True)



class Capacity(models.Model):
    capacity_name = models.CharField(max_length=100)

    def __str__(self):
        return str(self.capacity_name)

class UserCapacityValue(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    capacity = models.OneToOneField(Capacity, on_delete=models.CASCADE)
    user_capacity_value = models.DecimalField(max_digits=5, decimal_places=3, default=0.000)

    def __str__(self):
        return str(self.user) + str(self.capacity.capacity_name) + str(self.user_capacity_value)

class QuestionCapacityValue(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    capacity = models.OneToOneField(Capacity, on_delete=models.CASCADE)
    applicable = models.BooleanField(default=False)
    question_capacity_value = models.DecimalField(max_digits=5, decimal_places=3, default=0.000)

    def __str__(self):
        return str(self.question) + str(self.capacity.capacity_name) + str(self.question_capacity_value)

只有最初的想法(我非常肯定是离开的)是:

    refined_quetion_qset = targetqset.objects.filter(questioncapacityvalue_set__question_capacity_value__lte=F('???'))

不知道在F函数中放入什么,并想象这只有在这种情况下存在一对一而不是一对多关系时才有效。

0 个答案:

没有答案
相关问题