是否可以使用get_fieldname_display()作为注释值?
queryset.filter(is_draft=True).annotate(status=get_status_display() )
如果是的话,我该怎么做呢,有没有pythonic或更好的方法来做到这一点?
答案 0 :(得分:0)
您可以使用注释,但它会更复杂一些。首先,您必须在模型和查询中使用的单独变量中进行选择:
statuses = [
('status1', 'status display number 1'),
('status2', 'status display number 2'),
# ...
]
class YourModel(models.Model):
status = models.CharField(max_length=10, choices=statuses)
# rest of your model
然后查询集看起来像这样:
from django.db.models import Case, Value, When
YourModel.objects.filter(
is_draft=True
).annotate(
status_display=zone_order=Case(
*[When(status=s[0], then=Value(s[1])) for s in statuses],
output_field=CharField()
)
)
您也可以在管理器中使用此注释技巧来覆盖get_queryset。但是,我不知道这种方法对延迟翻译的影响。免责声明:我没有在现场翻译上测试,所以可能存在错误。