如何在Django模型中将列表存储到多对多字段中 [英] how to store a list into many-to-many field in django model

查看:224
本文介绍了如何在Django模型中将列表存储到多对多字段中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a model class dietplan in which there is a many-to-many field named breakfast. In my view.py I have done some calculation and get a value for breakfast as nested list i.e. [['abc','asda'],['val3','val4']]

我想在我的多对多字段中列出所有这四个列表.

I want to these all 4 list in my many to many field.

这是我的代码:

MODELS.PY \

MODELS.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()

显示无法散列的列表类型错误

Showing unhashable list type error

推荐答案

假定膳食对象已经存在,首先应从其名称中获取它们.您可以尝试以下操作:

Assuming Meal objects already exists, first you should get them from their name. 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:

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

注意:我尚未在django中测试代码,让我知道这会引起一些错误.

Note: I have not tested the code in django, let me know this raise some errors.

这篇关于如何在Django模型中将列表存储到多对多字段中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆