Django ORM(1.11):如何在注释中获取与条件匹配的相关对象列表的第一个元素

时间:2018-10-04 11:44:18

标签: python django python-2.7

我有以下注释:

name=Case(
    When(
        related_model__confirmed=F("confirmed"),
        then=F("related_model__name")
    ),
    default=None,
    output_field=CharField()
)

它有一个明显的问题:它增加了查询集的大小。

不仅如此,我希望将注释设置为rel_model_a__model_b__name(第一次满足条件),或者设置为None(如果从未满足条件)。

有什么办法吗?


编辑1:

这是涉及的两个模型的(非常)源代码的简化版本。

from django.db import models

class Sheet(models.Model):
    generated = models.DateTimeField(auto_now_add=True)
    confirmed = models.DateTimeField(default=None, null=True)

class Brand(models.Model):
    name = models.CharField(max_length=255)
    sheet = models.ForeignKey(Sheet, on_delete=models.CASCADE, related_name="sheet_brands")
    confirmed = models.DateTimeField(default=None, null=True)

queryset = Sheet.objects.annotate(name=Case(
    When(
        sheet_brands__confirmed=F("confirmed"),
        then=F("sheet_brands__name")
    ),
    default=None,
    output_field=CharField()
)

0 个答案:

没有答案