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(( 函数有问题,我想在这里使用它来从变量中排除一些单词。

总结我的问题如下:

-从另一个类检索属性是通过引用该类的对象来完成的。 在本例中,产品.对象.全部((

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

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

Replace((

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

所以你需要做一些类似的事情

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

获取值

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

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

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

性能

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

您的类可以具有依赖于其他类的属性,但请确保处理在其他类中找不到值的异常。 所以我相信使用@property并不是一个坏主意

此外,您是否尝试使用

diet_types.replace("vegan, ", " vegeterian")

最新更新