Reputation: 331
All fields are filled. But for some reason does not go into the form_valid
method, but it goes into form_invalid
. Why form is 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
template
<form action="{% url 'little_form' %}" method="post">
{% csrf_token %}
{{ little_form.as_p }}
<input type="submit" name="{{ little_form.prefix }}" value="Submit">
</form>
Upvotes: 1
Views: 129
Reputation: 477607
The prefix
is applied to all form input widgets. But in your LittleForm
view, you did not use that prefix.
You can add it by overriding the prefix
attribute [Django-doc]:
class LittleForm(FormView):
form_class = CreditFilterForm
prefix = 'little'
Note: I advice to rename
LittleForm
toLittleFormView
. It makes it more clear what that class is, and it will avoid a "collision" if you later construct a form with the same name.
Upvotes: 2