我的模型的函数取决于外部参数
class MyModel(models.Model):
some_filed = ...
@property
def my_property(self, user=None):
try:
qs = OtherModel.objects.get(field1=self, user=user)
except OtherModel.DoesNotExist:
return None
return qs.field2
所以我需要像my_property一样注释
MyModel.objects.all().annotate(field2=my_property(user=user))
答案 0 :(得分:0)
你完全以错误的方式解决这个问题。正如我所说,你不能定义一个带参数的属性;定义一个方法的重点是你在没有调用括号的情况下直接引用它,所以实际上没有办法传递一个参数。并且使用注释在这里也没有意义;它定义了一个数据库操作,因此它不可能引用Python中定义的方法。
幸运的是,您实际需要的结果非常简单,并且不需要属性或注释。您只需使用标准查询语法:
MyModel.objects.filter(othermodel__user=user).order_by(othermodel__field2)