Reputation: 1943
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..
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
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
Reputation: 22808
if form.is_valid():
.....
return HttpResponseRedirect(reverse('events:ev_tonight'))
Upvotes: 1