Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于多个结果的Django ORM筛选器()_Python_Django_Django Orm - Fatal编程技术网

Python 用于多个结果的Django ORM筛选器()

Python 用于多个结果的Django ORM筛选器(),python,django,django-orm,Python,Django,Django Orm,我有以下型号: class DisputeAssignments(models.Model): case_id = models.ForeignKey(Case, on_delete=models.CASCADE, related_name='dispute_assigned_to') user_id = models.ForeignKey('users.User', on_delete=models.CASCADE, blank=False, null=False, relat

我有以下型号:

class DisputeAssignments(models.Model):
    case_id = models.ForeignKey(Case, on_delete=models.CASCADE, related_name='dispute_assigned_to')
    user_id = models.ForeignKey('users.User', on_delete=models.CASCADE, blank=False, null=False, related_name='assigned_disputes')
    assignment_date = models.DateTimeField()
现在,这种关系允许出现以下情况:来自FullVector模型的多个条目指向同一个案例条目。此外,总是有多个短向量条目指向同一个FullVector条目,并且总是有一个预测条目指向每个短向量条目

Example:
Case --> FullVector1 --> ShortVector1 --> Prediction1
     |               |-> ShortVector2 --> Prediction2
     |               |-> ShortVector3 --> Prediction3
     |               \-> ShortVector4 --> Prediction4
     |
     \-> FullVector2 --> ShortVector5 --> Prediction5
                     |-> ShortVector6 --> Prediction6
                     |-> ShortVector7 --> Prediction7
                     \-> ShortVector8 --> Prediction8
我需要编写一个Django ORM查询,对于每个DisputeAssignment条目,该查询将检查通过Case->different FullVector和ShortVector条目与之关联的所有预测条目是否具有大于-1的verif_req值

我从这个开始:

DisputeAssignments.objects.filter(case_id__full_vectors__short_vectors__predictions__verif_req__gt=-1)
但是上述方法失败了,例如,如果FullVector1相关的预测功能全部为0,而FullVector2相关的预测功能全部为-1。我希望这种情况会导致忽略此DisputeAssignment条目,但由于FullVector1相关条目满足verif_req>-1的要求,因此它被保留在QuerySet中

我需要编写一个Django ORM查询,为每个DisputeAssignment 条目将检查是否所有与之关联的预测条目 通过大小写->不同的FullVector和ShortVector条目 verif_req值,大于-1


您可以在verif_req没有很好工作的地方获得争议,谢谢。你能解释一下它是怎么工作的吗?在我看来,我需要一个递归地对每个结果应用过滤器的查询。Django的网页并没有将Q表达式的操作描述为递归查询,而更像是不同过滤器表达式的包装器,可以使用AND/OR运算符链接。Q表达式还提供了在过滤时使用not with~运算符的机会。在你的情况下,它只是一个没有条件的过滤器。嗯,好吧,但是在我的例子中,否定查询结果的能力给了我们什么呢?很抱歉,我在这里遇到了一个非常尴尬的时刻,但我不知道询问哪些案例与小于等于-1的预测相关联如何为我的问题带来一个正确的结果:您正在筛选DisputeAssignments对象,如果DisputeAssignments对象的相关Case->FullVector->ShortVector->Prediction不符合条件,那么这个DisputeAssignments对象将不会进入过滤结果,依此类推。啊,现在就得到了。谢谢
class ShortVector(models.Model):
    id = models.BigAutoField(primary_key=True)
    detailed_fv_version = models.BinaryField()
    full_vector = models.ForeignKey(FullVector, on_delete=models.CASCADE, related_name='short_vectors')
    short_vector = models.BinaryField(null=True)
class Prediction(models.Model):
    id = models.BigAutoField(primary_key=True)
    short_vector = models.ForeignKey(ShortVector, on_delete=models.CASCADE, related_name='predictions', null=True, default=None)
    verif_req = models.SmallIntegerField(default=1)
Example:
Case --> FullVector1 --> ShortVector1 --> Prediction1
     |               |-> ShortVector2 --> Prediction2
     |               |-> ShortVector3 --> Prediction3
     |               \-> ShortVector4 --> Prediction4
     |
     \-> FullVector2 --> ShortVector5 --> Prediction5
                     |-> ShortVector6 --> Prediction6
                     |-> ShortVector7 --> Prediction7
                     \-> ShortVector8 --> Prediction8
DisputeAssignments.objects.filter(case_id__full_vectors__short_vectors__predictions__verif_req__gt=-1)
from django.db.models import Q

DisputeAssignments.objects.filter(~Q(case_id__full_vectors__short_vectors__predictions__verif_req__lte=-1))