Где переопределить Django CreateView? - PullRequest
1 голос
/ 27 мая 2019

Я открыл предыдущий выпуск SO, касающийся многих полей, которые не сохраняются в Django Createview здесь. Django CreateView с ManyToManyField После устранения неисправностей большую часть сегодняшнего дня я обнаружил, что этот код действительно работает:

class CreateAuthorView(LoginRequiredMixin,CreateView):

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.save() 
        instance = form.save()

        if instance.access_level == "Custom":
            obj = NewAuthor.objects.get(secret=instance.name)
            obj.access.add(instance.created_by.id)
            print(instance.created_by.id)
            print(obj.access.all())
            instance = form.save()
            obj.save()
            form.save_m2m()
            instance = form.save()

        return super(CreateAuthorView, self).form_valid(form)

Когда я запускаю print(obj.access.all()), я вижу в своей консоли, что

    obj.access.add(instance.created_by.id)

Строка кода на самом деле делает именно то, что я хочу ... она добавляет созданный_байта в поле доступа (ManyToManyField), которое я определил в моей модели.Однако, когда запись фактически обрезается, в поле доступа добавляются только те значения, которые пользователь выбрал в форме, и созданный_байк никогда не попадает в базу данных.

Должен ли я переопределить CreateView где-нибудь еще, чтобы созданный объект вступил в силу?Похоже, что мое первоначальное обновление в form_valid перезаписывается, что я подозреваю.На самом деле я доказал это, потому что мое обновление на самом деле находится в моей консоли, но не попадает в базу данных.Заранее спасибо за любые мысли о том, как лучше всего решить.

1 Ответ

0 голосов
/ 31 мая 2019

Я нашел ответ на свой вопрос через этот ТАК вопрос. Оказывается, вы должны переопределить SAVE в ModelForm, чтобы сохранить поля M2M. Сохранить формы Django «многие ко многим» Этот был хитрым.

...