Reputation: 335
I don't know why my form is invalid. Despite everything seems to be normal. I am not getting any error. sending you screenshot of models.py
Here is my forms.py
class LeadForm(forms.ModelForm):
product_queryset = []
product_name = forms.MultipleChoiceField(choices=product_queryset, required=False)
contact = PhoneNumberField()
def __init__(self, *args, **kwargs):
super(LeadForm, self).__init__(*args, **kwargs)
self.fields["product_name"].choices = [(pro.get('id'), pro.get('name')) for pro in
Products.objects.all().values('id', 'name')]
class Meta:
model = Lead
exclude = ('created_at','created_by')
widgets = {
'date_of_enquiry': DateInput(attrs={'type': 'date'})
}
Here is my views.py
def create_lead(request):
u = User.objects.get(username=request.user.get_username())
if request.method == 'POST':
print(request.POST)
# form = LeadForm()
form = LeadForm(request.POST)
if form.is_valid():
print('inside valid')
form.save(commit=True)
form.created_by = u
form.save()
form = LeadForm()
context = {"form": form}
return render(request, 'create_lead.html', context)
Upvotes: 0
Views: 65
Reputation: 51978
You should render the errors you are getting, to do that you need to send to template:
def create_lead(request):
form = LeadForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
instance = form.save(commit=False)
instance.created_by = request.user
instance.save()
return redirect('/sucess_url')
context = {"form": form}
return render(request, 'create_lead.html', context)
And render the errors in template:
{% for field in form %}
{{ field.errors }}
{% endfor %}
More information can be found in documentation
regarding form error rendering.
Probably you should remove the __init__
method from Form class, instead add a __str__
method in Product
model:
class Product(models.Model):
# rest of the code
def __str__(self):
return self.name
Upvotes: 1
Reputation: 227
Please do in your forms.py
class Meta:
model = Lead
exclude = ('created_at','created_by')
fields = ('product_name', [and all your fields which you want to include])
widgets = {
'date_of_enquiry': DateInput(attrs={'type': 'date'})
}
Upvotes: 0