[英]Django ModelForm passing multiple ManytoMany that are using through?
[英]Django ManyToMany passing variables
我已经开始了我的 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 吗?
代替()
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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.