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

2024-09-26 22:12:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下型号:

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()
class Case(models.Model):
    sn = models.CharField(max_length=100, verbose_name=_('Serial number'))
    user = models.ForeignKey('users.User', on_delete=models.PROTECT, related_name='cases')
class FullVector(models.Model):
    full_feature_vector = models.BinaryField()
    version = models.FloatField()
    processed_on = models.DateTimeField()
    case = models.ForeignKey(Case, on_delete=models.CASCADE, related_name='full_vectors')
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)

现在,这种关系允许出现以下情况:来自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条目,该查询将检查与之关联的所有预测条目(通过大小写->;不同的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>;的要求,因此它被保留在QuerySet中-1.


Tags: nameidmodelonmodels条目deletefull
1条回答
网友
1楼 · 发布于 2024-09-26 22:12:33

I need to write a Django ORM query, which for each DisputeAssignment entry will check, if ALL Prediction entries associated with it (through Case -> different FullVector and ShortVector entries), have verif_req value, which is greater than -1.

您可以得到DisputeAssignments,其中verif_req不是<;=-1加Q

from django.db.models import Q

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

相关问题 更多 >

    热门问题