Reputation: 119
I have a simple form in my Django project:
forms.py
class DamageListCriteria(forms.Form):
fromdate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))
todate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))
class Meta:
fields = ['fromdate','todate']
views.py
class DamageListCriteria(TemplateView):
template_name = "damage/damagelist_criteria.html"
def get(self, request):
form = DamageListCriteria()
general = General.objects.get(pk=1)
args = {
'form': form,
'general': general
}
return render(request, self.template_name, args)
def post(self, request):
general = General.objects.get(pk=1)
form = DamageListCriteria(request.POST)
args = {
'form': form,
'general': general
}
return render(request, self.template_name, args)
urls.py
url(r'damage/list/criteria/$', views.DamageListCriteria.as_view(), name="damage-list-criteria"),
when I try to post I am getting this error : '__init__() takes 1 positional argument but 2 were given'
the error is on the form = DamageListCriteria(request.POST) line of code.
Thanks in advance for your time
Upvotes: 0
Views: 175
Reputation: 88639
This is because you defined your form class and view class with the same name. So change the class name of either view or form class.
or change your respective files as below,
forms.py
(Changed form class name to DamageListCriteriaForm
)
class DamageListCriteriaForm(forms.Form):
fromdate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))
todate = forms.CharField(widget=forms.widgets.DateTimeInput(attrs={'type': 'datetime-local'}))
class Meta:
fields = ['fromdate', 'todate']
views.py
(changed the references of form class)
class DamageListCriteria(TemplateView):
template_name = "damage/damagelist_criteria.html"
def get(self, request):
form = DamageListCriteriaForm()
general = General.objects.get(pk=1)
args = {
'form': form,
'general': general
}
return render(request, self.template_name, args)
def post(self, request):
general = General.objects.get(pk=1)
form = DamageListCriteriaForm(request.POST)
args = {
'form': form,
'general': general
}
return render(request, self.template_name, args)
Upvotes: 2
Reputation: 949
You redefined your DamageListCriteria
class in views.py
. So, you're trying to instantiate your view class, instead of form.
Try changing your view name to DamageListCriteriaView
, or/and form to DamageListCriteriaForm
.
Upvotes: 0