#python #django #django-forms #django-class-based-views #django-crispy-forms
#питон #джанго #джанго-формы #представления на основе классов django #джанго-хрустящие-формы
Вопрос:
Всякий раз, когда я отправляю форму, она недействительна, и к ней не прикреплено сообщение об ошибке, когда я пытаюсь прочитать ее с помощью form.errors; она пуста. Вот что у меня есть:
models.py
class Project(models.Model): project = models.CharField(unique=True, max_length=50) is_active = models.BooleanField(default=False)
forms.py
from crispy_forms.bootstrap import FormActions from crispy_forms.helper import FormHelper from crispy_forms.layout import Layout, Row, Column, Submit, Field class SelectProjectForm(forms.Form): def __init__(self, active_choices, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['is_active'] = forms.ChoiceField(choices=active_choices, widget=forms.Select) self.helper = FormHelper() self.helper.form_method = 'post' self.helper.layout = Layout( Row( Column(Field('is_active')) ), Row( Column(FormActions(Submit('activate', 'Activate Project'))) ), )
views.py
class ProjectSettings(LoginRequiredMixin, TemplateView): template_name = 'Home/project_settings.html' def get(self, request, *args, **kwargs): active_choices = [] for project in Project.objects.all(): active_choices.append((project.id, project.project),) return render(request, self.template_name, {'form': SelectProjectForm(active_choices)}) def post(self, request, *args, **kwargs): if 'activate' in request.POST: form = SelectProjectForm(request.POST) if form.is_valid(): .... messages.error(request, 'Something went wrong') return redirect('project_settings')
project_settings.html:
lt;divgt; {% load crispy_forms_tags %} {% crispy form %} lt;/divgt;
Я думаю, что проблема может быть в методе POST в представлениях, где я инициализирую форму, но я не знаю, как передать active_choices
параметр в post. Если это не проблема, тогда я потерян.
Комментарии:
1. Покажите нам шаблон страницы, который отображает форму.
2. Извини за это. Я обновил сообщение.
3. В
post()
, я не вижу, где отображается форма…4. Есть
form = SelectProjectForm(request.POST)
во второй строке метода post.5. Да, но разве не
render()
должен быть где-нибудь звонок? Я не работал с хрустящими бланками.