如何将列表存储到Django mod的manytomy字段中

2024-04-19 10:44:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型类饮食计划,其中有一个多对多的领域命名为早餐。在my 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)

视图.PY

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

显示不可损坏的列表类型错误


Tags: namepytrue列表models领域abcrelated
1条回答
网友
1楼 · 发布于 2024-04-19 10:44:51

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

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

收集它们之后,可以将它们附加到manytomany关系中,如下所示:

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

注意:我还没有在django中测试代码,请告诉我这会引起一些错误

相关问题 更多 >