Почему форма недопустима в FormView? - PullRequest
1 голос
/ 22 июня 2019

Все поля заполнены.Но почему-то не входит в метод form_valid, а входит в form_invalid.Почему форма недействительна?

forms.py

class CreditFilterForm(forms.Form):
    CURRENCY_CHOICES = (
        ('KZT', _('KZT')),
        ('USD', _('USD')),
    )

    PERIOD_CHOICES = (
        ('1', _('One year')),
        ('2', _('Two')),
        ('3', _('Three'))
    )

    sum = forms.CharField(widget=forms.NumberInput(attrs={'id': "sum", 'class':"forminput-text"}))
    currency = forms.ChoiceField(choices = CURRENCY_CHOICES, widget=forms.Select(attrs={'name': "minbeds", 'id':"currency"}))
    term = forms.ChoiceField(choices = PERIOD_CHOICES, widget=forms.Select(attrs={'id':"term", 'name': "minbeds"}))

views.py

class CreditsList(ListView):
    model = Credit
    template_name = 'credits/credit_listing.html'

    def get(self, request, *args, **kwargs):
        self.object_list = self.get_queryset()
        little_form = CreditFilterForm(self.request.GET or None, prefix="little")
        ...

class LittleForm(FormView):
    form_class = CreditFilterForm

шаблон

<form action="{% url 'little_form' %}" method="post">
    {% csrf_token %}
    {{ little_form.as_p }}
    <input type="submit" name="{{ little_form.prefix }}" value="Submit">
</form>

1 Ответ

2 голосов
/ 22 июня 2019

prefix применяется к всем виджетам ввода формы. Но в вашем LittleForm виде вы не использовали этот префикс.

Вы можете добавить его, переопределив атрибут prefix [Django-doc] :

class LittleForm(FormView):
    form_class = CreditFilterForm
    <b>prefix = 'little'</b>

Примечание : советую переименовать LittleForm в LittleForm<b>View</b>. Он делает более понятным, что это за класс, и он избежит «столкновения», если позже вы создадите форму с тем же именем.

...