我想使用自定义方法值并对其进行计算。是否可以注释模型的自定义方法?如果是的话,你能举个例子吗?提前谢谢!
模型
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 )
答案 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()查询集,然后它应该可以工作。