Django注释模型自定义方法

时间:2018-04-18 01:44:27

标签: django django-queryset

我想使用自定义方法值并对其进行计算。是否可以注释模型的自定义方法?如果是的话,你能举个例子吗?提前谢谢!

模型

class Project(model.models):

    project_name = models.CharField(
        _('Project name'),
       max_length=255,
       blank=True,
       null=True,
   )

   def custom_method(self):
       return 100

查询

qs = Project.objects.annotate(new_val=F('custom_method')  * 1.5 ) 

2 个答案:

答案 0 :(得分:2)

没有。任何通过内置管理器的东西都必须是真实的领域,因为它们只触及数据库。为了使用自定义字段/属性,他们必须将表中的每条记录转换为模型,然后用Python过滤它们。

资料来源:Django - Can you use property as the field in an aggregation function?

如果您按照提到的那样尝试注释,则会得到如下FieldError

FieldError: Cannot resolve keyword 'custom_method' into field. Choices are: project_name



简而言之,您只能使用实际数据库属性/字段

进行注释

答案 1 :(得分:1)

我相信您必须先评估查询集。所以一旦你做到了:

for i in qs:
    return i.custom_method * 1.5

使用Product.objects.all()查询集,然后它应该可以工作。