Django - обязательно ли использовать / перезаписывать form_valid () при использовании CBV? - PullRequest
2 голосов
/ 20 января 2020

Я использую приведенное ниже представление на основе классов в Django, чтобы иметь возможность создавать / вставлять новый объект в базу данных, которая работает:

class AddAreaMapView(CreateView):
    model = AreaMap
    fields = ['fCityCode',
              'fCountyCode', 'fCountryCode', ]
    template_name = 'myapp/blank.html'
    success_url = '/'

Однако я видел, что там Рекомендуется использовать метод form_valid() вместе с CreateView. Почему необходимо перезаписать его, поскольку Django уже делает это? Это недостающая часть информации, и я был бы признателен, если бы кто-нибудь мог дать соответствующий ответ. Спасибо!

1 Ответ

1 голос
/ 20 января 2020

Почему требуется перезаписать его, поскольку Django уже делает это?

Это , а не . В документации Django пример [Django -doc] содержит , а не содержит переопределение для form_valid.

form_valid, который используется тот, который предоставлен ModelFormMixin [Django -doc] . Для метода form_valid [Django -doc] он будет:

Сохраняет экземпляр form , устанавливает текущий объект для вида и перенаправляет на get_success_url().

get_success_url() метод [Django -doc] будет:

Определить URL-адрес для перенаправления при успешной проверке формы. Возвращает django.views.generic.edit.ModelFormMixin.success_url, если оно предоставлено ; в противном случае попытки использовать get_absolute_url() объекта.

Поэтому, если вы предоставите success_url, он будет перенаправлен на этот URL. Если вы не предоставите success_url (или не переопределите метод get_success_url), он будет стремиться получить get_absolute_url() [Django -doc] объекта .

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