ManyToMany не сохраняет в Db Django - PullRequest
0 голосов
/ 17 мая 2018

У меня есть поле ManytoMany, и результаты CheckboxSelectMultiple не сохраняются в БД, и я не понимаю, почему. Это должно быть действительно просто, но ...

Вот код:

models.py

class Person(models.Model):

    last_name = models.CharField(max_length = 50)
    first_name = models.CharField(max_length = 50)

    def __str__(self):
        return self.last_name +" "+self.first_name

class Event(models.Model):
        owner = models.ForeignKey(User, on_delete=models.SET_NULL, null = True)
        person = models.ManyToManyField(Person)

forms.py

class EventForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.user = kwargs.get('user',None)
        #self.user = kwargs.pop('user',None)
        super(EventForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.form_method = 'POST'
        #self.helper.form_action = reverse_lazy('simpleuser')
        self.helper.add_input(Submit('submit', 'Submit', css_class='btn-success'))     

    class Meta:
        model = Event
        fields = ['person']
        widgets ={
        'person': forms.CheckboxSelectMultiple,
        }

views.py

def uploadevent(request):

    if request.method == "POST":
        form =EventForm(request.POST)
        if form.is_valid():
            event = form.save(commit=False)
            event.owner = request.user
            event.save()
    else:
        form = EventForm()

    return render...

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Для сохранения многих вам необходимо набрать save_m2m() при использовании commit=False (проверьте здесь ):

if form.is_valid():
        event = form.save(commit=False)
        event.owner = request.user
        event.save()
        form.save_m2m()
0 голосов
/ 17 мая 2018

См. Ответ на этот вопрос: «1001 * Сохранение данных« Много ко многим »через форму модели в Django»

Цитирование ОП:

Когда используется commit = False, вы должны вызвать save_m2m ()

m2m отношения требуют, чтобы родительский объект был сохранен первым, что вы не делаете с помощью commit = False

Просто добавьте эту строку ниже event.save()

    if form.is_valid():
        event = form.save(commit=False)
        event.owner = request.user
        event.save()
        form.save_m2m()

Ссылка: https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#the-save-method

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...