на моем пути перфекционизма, я здесь, чтобы задавать больше вопросов о не очень хорошо документированных представлениях на основе классов.
Я провожу около 5 часов, изучая представления на основе классов, скрываясьв код, и у меня есть вопрос.
Может быть, то, что я пытаюсь сделать, глупо, и если так, просто скажи это.
Я приведу простой пример:
class SearchFormView(FormView):
template_name = 'search/search.html'
form_class = SearchForm
def get(self, request, *args, **kwargs):
form = SearchForm(self.request.GET or None)
if form.is_valid():
self.mystuff = Stuff.objects.filter(title__icontains=form.cleaned_data['query'])[:10]
return super(SearchFormView, self).get(request, *args, **kwargs)
Это идеальный допустимый класс (верно?).
У вас есть форма, и вы делаете запрос GET с параметром запроса.
Работает какОчарование.
Но давайте представим ... Я проверяю ввод запроса, чтобы предотвратить какой-либо тип атаки, и вижу, что запрос является вредоносным, поэтому я поставил ошибку проверки.
Со старымфункции, у меня есть экземпляр формы (пустой), и я помещаю в него данные и ошибки проверки, если это необходимо.Я всегда возвращаю этот экземпляр, если он пустой (первый запрос) или если он заполнен ошибками (случай вредоносного запроса).
Проблема связана с представлениями на основе классов.В моем методе get я работаю с дополнительным экземпляром SearchForm , поэтому, если я добавлю валидацию, он будет там, и если я вызову get для отца , он будет использоватьэкземпляр в "form_class", который был бы пустым.
Итак, я думаю, что должен быть способ, которым я всегда использую одну и ту же форму, я имею в виду: я вызываю метод запроса, я выбираю form_class (несоздайте новую форму), передайте данные, подтвердите, и отец вернет эту форму с материалами проверки.
Я не уверен, правильно ли я объяснил.Короче говоря, я создаю копию формы в get, но я возвращаю отец get , у которого есть еще одна копия, которая будет пустой, поэтому мой при отображении шаблона не будет никаких ошибок, потому чтоотправленная форма пуста.
Есть идеи?Спасибо.