简体   繁体   English

如何将列表存储到 django model 中的多对多字段中

[英]how to store a list into many-to-many field in django model

I have a model class dietplan in which there is a many-to-many field named breakfast.我有一个 model class 饮食计划,其中有一个名为早餐的多对多字段。 In my view.py I have done some calculation and get a value for breakfast as nested list ie [['abc','asda'],['val3','val4']]在我的 view.py 中,我进行了一些计算并得到了早餐的值作为嵌套列表,即 [['abc','asda'],['val3','val4']]

I want to these all 4 list in my many to many field.我想在我的多对多领域列出所有 4 个列表。

This is my code:这是我的代码:

MODELS.PY\模型.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意见.PY

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

Showing unhashable list type error显示不可散列列表类型错误

Assuming Meal objects already exists, first you should get them from their name.假设 Meal 对象已经存在,首先您应该从它们的名称中获取它们。 You can try something like:您可以尝试以下方法:

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

once you have collected them, you can append them in your manytomany relation as follow:一旦你收集了它们,你可以在你的多对多关系中 append 它们如下:

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

Note: I have not tested the code in django, let me know this raise some errors.注意:我没有测试 django 中的代码,让我知道这会引发一些错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM