我有以下注释:
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()
)