首页 > 解决方案 > Django ManyToMany 传递变量

问题描述

我已经开始了我的 Django 项目,我想在 2 个类之间共享一些数据。我不确定我是否做得正确。它有效,但我不想在我的项目中填充不良做法。我的代码如下所示:

class Products(models.Model):
    name = models.CharField(max_length=50)
    protein = models.FloatField()
    carbohydrates = models.FloatField()
    fat = models.FloatField()
    food_type = models.CharField(max_length=6, choices=(
        ("1", "Meat"),
        ("2", "Fruit")
        )
    )
class Meals(models.Model):#Child
    name = models.CharField(max_length=50)
    ingredient = models.ManyToManyField(Products)

    def protein(self):
        protein = 0
        for ing in self.ingredient.all():
            protein += ing.protein
        return protein 

    @property
    def carbohydrates(self):
        carbohydrates = 0
        for ing in self.ingredient.all():
            carbohydrates += ing.carbohydrates
        return carbohydrates 

    def diet_category(self):        
        diet_types = "vegan, vegeterian, Keto, Paleo, Gluten-free"
        food_types = ""
        for ing in self.ingredient.all():
            food_types += ing.food_type
        if "1" in food_types: 
            diet_types.replace("vegan, ", "").replace(" vegeterian,", "")
        return (diet_types + " | " + food_types)

此外,我在 python 中的 .replace() 函数有问题,我想在这里使用它来从变量中排除一些单词。

总结我的问题是:

- 从另一个类中检索属性是通过引用该类的对象来完成的。在这种情况下 Products.objects.all()

-如何从模型中的变量中删除单词。

- 我应该将@property 用于从另一个类返回值的函数吗?

标签: pythondjangomany-to-many

解决方案


代替()

replace()函数返回具有替换值的字符串的副本。它不会更改原始字符串。

所以你需要做类似的事情

diet_types = diet_types.replace("vegan, ", "")
diet_types = diet_types.replace("vegetarian, ", "")

获取值

您可以像您一样循环或使用查询来实现相同的目的,例如:

def protein(self):
    return self.ingredient.aggregate(Sum('protein'))['protein__sum']

有关更多详细信息,请参阅有关聚合的文档。

特性

恕我直言,这是一个品味问题


推荐阅读