как сохранить список в поле многие ко многим в модели Django - PullRequest
0 голосов
/ 24 октября 2019

У меня есть план диеты модельного класса, в котором есть поле «многие ко многим» под названием «завтрак». В моем view.py я провел некоторые вычисления и получил значение для завтрака в виде вложенного списка, т.е. [['abc', 'asda'], ['val3', 'val4']]

Я хочувсе эти 4 списка в моем поле многие ко многим.

Это мой код:

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

Отображение не типичной ошибки типа списка

1 Ответ

0 голосов
/ 24 октября 2019

Предполагая, что объекты питания уже существуют, сначала вы должны получить их по их имени. Вы можете попробовать что-то вроде:

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, дай мне знать, это поднимает некоторые ошибки.

...