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看来原来的问题解决了,不是吗?至于另一个问题,考虑分开发布。