如何将模型方法的结果注释到Django查询集。

8

Django文档关于annotate()的内容:

使用提供的查询表达式列表为QuerySet中的每个对象进行注释。 表达式可以是简单值,对模型上的字段(或任何相关模型)的引用,或者...

是否可以为模型的方法结果进行注释?

我尝试了这样做:

my_queryset.annotate(ann=my_method(request.user))

并且

my_queryset.annotate(my_method(request.user))

但是我收到一个错误,说my_method未定义。该方法存在并且通常正常工作:object.my_method(request.user) 我认为有一个装饰器可以使方法像字段一样处理,但我似乎找不到任何相关信息(它可能是针对基于django模板的方法调用,因此可能与此无关) 此问题提供了另一种解决方案。 但我想知道是否可能注释方法结果。

3
可能是Django自定义注释函数的重复问题。 - 2ps
1个回答

1

这个问题很久了,但我想回答它,因为对像我一样寻找答案的人可能会有帮助。 基本上,我尝试了很多方法,但没有直接的方法可以实现,我找到的解决方法是在进行初始基本查询后,像下面这样添加一个额外的字段填充默认值:
my_queryset = myModelClass.objects.annotate(ann=Value(False, output_field=models.BooleanField())).all()
然后遍历返回的查询集并调用模型方法,如下所示:

for record in my_queryset:
record.ann = cqa.my_method(request.user)

谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接