• Почему form_valid не обновляет объект а создает новую запись?

    @Michaelmrc
    посмотри вот тут:
    UpdateView
    CreateView

    Посмотри на различия для Create и Update View, а именно на self.get_object() и self.get_form_kwargs().
    Функция get_form_kwargs возвращает словарь с ключами 'initial', 'instance', 'data', 'files', и 'instance' определяется в ModelFormMixin (а в твоем случае ты его не используешь). Когда в get_form_kwargs значение 'instance' объект модели - форма обновляет объект, когда None - создает новый.

    Дополнение:
    Да, в ModelFormMixin instance уже передается в форму из self.object. Откройте ModelFormMixin и разверните "def get_form_kwargs(self):" и то что в нем. ModelFormMixin наследует FormMixin, в переопределенном методе get_form_kwargs вызывает super(), а в полученный словарь дописывает instance:
    def get_form_kwargs(self):
        """
        Returns the keyword arguments for instantiating the form.
        """
        kwargs = super(ModelFormMixin, self).get_form_kwargs()
        if hasattr(self, 'object'):
            kwargs.update({'instance': self.object})
        return kwargs
    Ответ написан
    3 комментария