python - 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 用于从另一个类返回值的函数吗?
解决方案
代替()
该replace()
函数返回具有替换值的字符串的副本。它不会更改原始字符串。
所以你需要做类似的事情
diet_types = diet_types.replace("vegan, ", "")
diet_types = diet_types.replace("vegetarian, ", "")
获取值
您可以像您一样循环或使用查询来实现相同的目的,例如:
def protein(self):
return self.ingredient.aggregate(Sum('protein'))['protein__sum']
有关更多详细信息,请参阅有关聚合的文档。
特性
恕我直言,这是一个品味问题
推荐阅读
- java - 无法生成 CXF 客户端“操作中未绑定的 PortType 元素”
- java - RequestParam 和 PathVariable 上的自定义注释
- wordpress - 使用 wordpress REST API 登录时出现 JWT 身份验证密码错误
- python - 在熊猫数据框中查找特定的值组合
- java - 带有注释的 Spring http 请求验证
- oracle - SSIS 包不会在服务器上运行,但在开发机器上运行良好
- android - 从不同的机器调试 SHA1 是不同的。如何为应用程序生成特定的 SHA1?
- r - 可旋转的无法正确呈现
- deployment - 模型未腌制
- javascript - 如何为 Windows 运行 react-native?我有一个问题:npx react-native run-android 错误