访问Django中的许多嵌套字段?

2024-05-12 12:54:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三种模式:食物、膳食和膳食计划。你知道吗

class Food(models.Model):
    name = models.CharField(max_length = 30, default="food")
    calories = models.FloatField(validators=[validate_positive])
    fat = models.FloatField(validators=[validate_positive])
    carbs = models.FloatField(validators=[validate_positive])
    protein = models.FloatField(validators=[validate_positive])

class Meal(models.Model):
    foods = models.ManyToManyField(Food)

    @property
    def totalcals(self):
        sum = self.foods.aggregate(models.Sum('calories'))['calories__sum']
        if sum == None:
            return 0
        else:
            return sum

class MealPlan(models.Model):
    meals = models.ManyToManyField(Meal)
    owner = models.CharField(max_length=14, default= "")

    @property
    def totalcals(self):
         sum = self.meals.foods.totalcals(models.Sum('totalcals'))['totalcals__sum']
        if sum == None:
            return 0
        else:
            return sum

第一个totalcals属性工作正常。第二个会导致错误。我要米尔普兰的第二个totalcals返回它所有的食物totalcals汇总。有办法吗?你知道吗


Tags: selfmodelreturnmodelsvalidateclass食物sum
2条回答

那怎么办

@property
def totalcals(self):
   sum = 0
   for meal in self.meals.all():
       sum = sum + meal.totalcals

   if sum = 0:
       return None
   else:
       return sum

但我想也会有一个简短的答案。你知道吗

不应该吗自助用餐总卡…不是自助餐总共多少卡?食物不具有totalcals属性,但膳食具有totalcals属性。你知道吗

@property
def totalcals(self):
  sum = self.meals.totalcals(models.Sum('totalcals'))['totalcals__sum']

相关问题 更多 >