donkeyboy72
donkeyboy72

Reputation: 1943

Django Form Does Not Validate

I'm making a app called Startthedark using django from ground up tutorial and I bumped into an error.

I'll try to explain the error as clear as I can . Sorry If I can't.

My app display a a text box asking for a description and when I submit a description it's suppose to redirect me to another page that shows the latest description instead it redirect me to the same page..

enter image description here

Now I think the problem is with my views.py because the data can't valid so it just bring me back to the same page.Also it doesn't get submitted into the Event Models at admin page.

My views.py

 from events.models import Event
 from django.shortcuts import render_to_response
 from django.template import RequestContext
 from events.forms import EventForm
 from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect


 def tonight(request):
     events = Event.objects.filter(latest=True)
     return render_to_response('events/tonight.html',{'events':events},context_instance = RequestContext(request))


 def create(request):
     form = EventForm(request.POST or None)
     if form.is_valid():
         event = form.save(commit=False) 
         event.creator = request.user
         guessed_date = None
         event.start_date = guessed_date
         event.save()
         request.user.message_set.create(message='Your event was posted')
         if 'next' in request.POST:
             next = request.POST['next']
         else:
             next = reverse('ev_tonight')
         return HttpResponRedirect(next)
     return render_to_response(
         'events/create.html',
         {'form':form},
         context_instance = RequestContext(request)
     )

My forms.py

 from django import forms
 from events.models import Event
 class EventForm(forms.ModelForm):
     description = forms.CharField(max_length=340,widget=forms.Textarea)

     class Meta:
         model = Event
         fields = ('description',)

My URL.conf

 from django.conf.urls.defaults import *
 from django.contrib import admin
 from events import views
 urlpatterns = patterns('events.views',
         url(r'^tonight/$','tonight',name='ev_tonight'),
         url(r'^create/$','create',name='ev_create'),
 )

My models.py

  from django.db import models
 from datetime import datetime, timedelta
 from django.contrib.auth.models import User
 from django.db.models.query import QuerySet


 class Event(models.Model):
     description = models.TextField()
     creation_date = models.DateTimeField(default = datetime.now)
     start_date = models.DateTimeField(null=True, blank= True)
     creator = models.ForeignKey(User , related_name = 'event_creator_set')
     attendees = models.ManyToManyField(User , through = "Attendance")
     latest = models.BooleanField(default=True)
     def __unicode__(self):
         return self.description
     def save(self, **kwargs):
         now = datetime.now()
         start = datetime.min.replace(year = now.year , month=now.month,day=now.day)
         end = (start + timedelta(days=1)) - timedelta.resolution
         Event.objects.filter(latest=True,      creator=self.creator).filter(creation_date__range=(start,end)).update(latest=False)
         super(Event,self).save(**kwargs)

 class Attendance(models.Model):
     user = models.ForeignKey(User)
     event = models.ForeignKey(Event)
     registration_date = models.DateTimeField(default=datetime.now)

     def __unicode__(self):
         return "%s is attending %s" %(self.user.username,self.event)

My create.html

  {% extends "tin.html" %}
  {% block title %}Create - {{ block.super }}{% endblock %}
  {% block main_content %}
          <form method = "POST' action"">
              <ul>
              {{ form.as_ul }}
          </ul>
          <input type = "submit" value="Create Event" />
      </form>
  {% endblock %}                

Upvotes: 0

Views: 4051

Answers (2)

Ngenator
Ngenator

Reputation: 11259

Looks like you need to fix your template. The form tags appear to be wrong. You didn't properly close the method attribute, you used a single quote instead of double. That is why your form makes a GET request with the form data.

{% extends "tin.html" %}
{% block title %}Create - {{ block.super }}{% endblock %}
{% block main_content %}
    <form method="POST" action"">
        {% csrf_token %}
        <ul>
            {{ form.as_ul }}
        </ul>
        <input type = "submit" value="Create Event" />
    </form>
{% endblock %}

Upvotes: 2

catherine
catherine

Reputation: 22808

if form.is_valid():
     .....

     return HttpResponseRedirect(reverse('events:ev_tonight'))

Upvotes: 1

Related Questions