【问题标题】:how to store a list into many-to-many field in django model如何将列表存储到 django 模型中的多对多字段中
【发布时间】:2020-02-20 21:02:56
【问题描述】:

我有一个模型类饮食计划,其中有一个名为早餐的多对多字段。在我的 view.py 中,我进行了一些计算并得到了早餐的值作为嵌套列表,即 [['abc','asda'],['val3','val4']]

我想在我的多对多领域中列出这 4 个列表。

这是我的代码:

模型.PY\

class Dietplan(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    dietplan_name = models.CharField(max_length=255, null=True)
    breakfast = models.ManyToManyField('Meal', 
    related_name='breakfast_meal_name',)
    snacks1 = models.ManyToManyField('Meal', 
    related_name='snacks1_meal_name',)
    lunch = models.ManyToManyField('Meal', related_name='lunch_meal_name',)
    snacks2 = models.ManyToManyField('Meal', 
    related_name='snacks2_meal_name',)
    dinner = models.ManyToManyField('Meal', related_name='dinner_meal_name',)
    calories_slab = models.IntegerField(blank=True, null=True)

VIEWS.PY

def dietplan(request):
    d = Dietplan.objects.get(id = request.user.id)
    d.dietplan_name = 'abc'
    d.breakfast.set(','.join(breakfast))
    d.save()

显示不可哈希列表类型错误

【问题讨论】:

  • 粘贴代码时,请确保保留缩进。
  • 谢谢,我会处理的

标签: python database list django-models many-to-many


【解决方案1】:

假设 Meal 对象已经存在,首先您应该从它们的名称中获取它们。您可以尝试以下方法:

meal_names = 'meal1 meal2 meal3'.split()
meal_objects = []
for name in meal_names:
    meal_objects.append(Meal.objects.get(name=name))

一旦你收集了它们,你可以将它们附加到你的多对多关系中,如下所示:

d = Dietplan.objects.get(id = request.user.id)
d.breakfast.add(*meal_objects)  # unpacking meal_objects list as positional arguments
d.save()

注意:我没有在 django 中测试过代码,让我知道这会引发一些错误。

【讨论】:

  • 我有一个可变的早餐,它存储了 meal_names .. ex breakfast = [['milk', 'bread'],['milk','omlet']]
  • 主要问题是我有一个列表类型值的变量我想将该变量存储在多对多字段中
  • 牛奶、煎蛋卷和面包是不同的食物吗?为什么它们在嵌套列表中?也许您应该修改您的问题以更好地解释您要达到的目标,因为这并不是很清楚。
  • 早餐是多对多的领域,所以我可以通过管理面板将多餐存储在那里,我可以选择并保存,但首先从视图中我必须找出食物是什么,所以我将它们存储到列表形式然后尝试保存...我也尝试以字符串形式存储餐点,但它没有保存....然后错误是 int base '10' value not found
  • 早餐是多对多的领域,所以我可以通过管理面板将多餐存储在那里,我可以选择并保存,但首先从视图中我必须找出食物是什么,所以我将它们存储到列表形式然后尝试保存...我也尝试以字符串形式存储餐点,但它没有保存....然后错误是 int base '10' value not found
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 2020-08-13
  • 2013-07-22
  • 2021-11-27
  • 1970-01-01
  • 2011-07-17
  • 2013-05-17
  • 1970-01-01
相关资源
最近更新 更多