Django:值:如何调用模型方法
我有一个模型:Django:值:如何调用模型方法,django,Django,我有一个模型: class Parcel(models.Model): shop = models.ForeignKey(Shop, on_delete=models.CASCADE, null=True) fruit = models.ForeignKey(Fruit, on_delete=models.CASCADE, null=True) quantity = models.IntegerField() class Fruit(models.Model):
class Parcel(models.Model):
shop = models.ForeignKey(Shop, on_delete=models.CASCADE, null=True)
fruit = models.ForeignKey(Fruit, on_delete=models.CASCADE, null=True)
quantity = models.IntegerField()
class Fruit(models.Model):
name = models.CharField(max_length=30)
health_rating = models.IntegerField(null=True)
def somemethod(self):
if not self.health_rating:
return 0
else:
return self.health_rating
现在,如何也在中获取somemethod
值
Parcel.objects.values('fruit__name','fruit__somemethod')
不能在ORM查询中使用在模型类上定义的方法。但您可以做的是将方法的相同逻辑带入查询中:
从django.db.models导入Case,CharField,F,Value,When
Parcel.objects.annotate(
somemethod=Case(
当(name=“apple”,then=Value('harse')时,
默认值=F('name'),
输出字段=字符字段(),
)
).value('fruit\u name','somemethod')
如果您想获得包裹内水果的健康等级,那么
from django.db.models import Case, IntegerField, F, Value, When
Fruits.object.filter(parcel__isnull=False).annotate(
somemethod=Case(
When(health_rating__isnull=True, then=Value(0)),
default=F("health_rating"),
output_field=IntegerField()
)
).values("name", "somemethod")
您不能在
values
调用中调用模型方法。如果这与您前面的问题有关,请检查我的答案,这样您仍将拥有模型对象,您只需编写fruit\u实例。somemethod()
编辑了我的需求,您可以修改案例吗thing@Santhosh看来原来的问题解决了,不是吗?至于另一个问题,考虑分开发布。