Django form is_valid() fails
django, forms, post
Solution
All fields of your model are required. So, `form.is_valid()` will be True, if all fields are filled with correct values and are not blanked. You have declared fields `time`, `user`, `views` as hidden fields. Are you sure, that you have filled them in your template form? Also, you may want to auto stamp field `time = models.DateField()`. Modify your model field like
time = models.DateField(auto_now=True)`.
After this you don't have to fill it by yourself in template form.
Your view must return HttpResponse object in all cases. If your form is not valid, i.e. if `form.is_valid()` will return False, then no `HttpResponse` object will be returned by your view. This can be the source of your fail. Add `else` statement for `if form.is_valid()`:
from django.http import Http404
def new(request):
if request.method == 'POST': # If the form has been submitted...
form = StatementForm(request.POST) # A form bound to the POST data
if form.is_valid():
stmt = form.save()
path = 'stmt/' + stmt.id
return render_to_response(path, {'stmt': stmt})
else:
# Do something in case if form is not valid
raise Http404
else:
# Your code without changes
Problem
I am a real beginner in web development. The following code is failing at the `is_valid()` check. But I do not understand why: The form should get its data filled from the POST-data or not? Model: ``` class Statement(models.Model): text = models.CharField(max_length=255) user = models.ForeignKey(User) time = models.DateField() views = models.IntegerField() ``` ModelForm: ``` class StatementForm(ModelForm): class Meta: model = Statement widgets = { 'time':forms.HiddenInput(), 'user':forms.HiddenInput(), 'views':forms.HiddenInput(), } ``` View function: ``` def new(request): if request.method == 'POST': # If the form has been submitted... form = StatementForm(request.POST) # A form bound to the POST data if form.is_valid(): stmt = form.save() path = 'stmt/' + stmt.id return render_to_response(path, {'stmt': stmt}) else: c = {} c.update(csrf(request)) loggedin_user = request.user d = datetime.now() form = StatementForm(request.POST, initial={'time': d.strftime("%Y-%m-%d %H:%M:%S"), 'user':loggedin_user, 'views':0}) return render_to_response('new_stmt.html', {'form': form, },context_instance=RequestContext(request)) ``` I found similar topics and tried a lot. This is how i think it should work. I really need advice.