Django сохраняет список элементов в промежуточной таблице m2m

У меня есть поле m2m в классе и сквозная таблица. Я не таблица, чтобы сохранить список элементов из сквозной таблицы. если у меня есть форма множественного выбора, как показано ниже, и я хочу сохранить все выбранные элементы, как мне это сделать??

Форма моей модели выглядит так:

class ClassroomForm(ModelForm):
    class Meta:
          model = Classroom
          fields = ['classname','members','private']

    def __init__(self, *args, **kwargs):
                creator = kwargs.pop('user')
  super(ClassroomForm, self).__init__(*args, **kwargs)
  relations = Relations.objects.filter(initiated_by = creator)
  self.fields["members"].queryset = \
       User.objects.filter(pk__in=[r.follow.pk for r in relations])

и мой метод сохранения выглядит следующим образом:

def save_classroom(request):
   classroom_instance = Classroom()
   if request.method == 'POST':
        form = ClassroomForm(request.POST, request.FILES, user = request.user) 
        if form.is_valid():
           new_obj = form.save(commit=False)
           new_obj.user = request.user 
           new_obj.save()
           membership = Membership(member = HERE SELECTED ITEMS FROM FORM,classroom=new_obj)

           membership.save() 

Как это можно сделать? Спасибо!


person dana    schedule 24.06.2010    source источник


Ответы (1)


Django должен обрабатывать ModelForms «многие ко многим», как и любую другую форму модели.

Когда вы используете в форме простой метод save(), все данные, включая данные типа «многие ко многим», сохраняются без каких-либо дополнительных вызовов методов.

Ссылка:

person miku    schedule 24.06.2010
comment
я должен сохранить данные в промежуточной «сквозной» таблице. Вот почему я пытаюсь его инициализировать. В противном случае я получаю сообщение об ошибке: Невозможно установить значения для ManyToManyField, которое указывает промежуточную модель. Вместо этого используйте менеджер членства. - person dana; 25.06.2010
comment
@dana Вам удалось это исправить? - person Kari dime; 27.01.2021