Django: различное поведение в CreateView и UpdateView с уникальным ограничением - PullRequest
1 голос
/ 19 мая 2019
class Badge(Model):
    # ....

    class Meta:
        unique_together = ('identifier', 'restaurant')
  • Используя CreateView, при создании объекта Badge, идентификатор которого уже существует, я фактически получаю ошибку формы, которая является ожидаемым поведением.

  • Но, используя UpdateView, при редактировании объекта Badge, идентификатор которого уже существует, я не получаю никакой ошибки формы, но ошибка 500 с duplicate key value violates unique constraint.

Я не могу понять, почему поведение отличается. Мне бы хотелось, чтобы ошибка формы отображалась в обоих случаях.

1 Ответ

1 голос
/ 19 мая 2019

Я только что понял для проверки правильности, что все поля должны быть указаны в представлении на основе классов, даже если эти поля не должны быть заполнены пользователем.

class BadgesUpdateView(UpdateView):
    model = Badge
    # restaurant field must be included for validation even if the user does NOT fill it.
    fields = ('identifier', 'is_active', 'owner', 'restaurant')

    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        form.fields['restaurant'].widget = forms.HiddenInput()
        return form
...