Django POST dict empty despite form -


django 1.4.1. have form appears have proper values present in html yet post dict appears empty.

views.py (relevant portion):

@login_required def event(request, event_id):      event = event.objects.get(pk=event_id)     crew = event.userprofile_set.all()     current_user = request.user.get_profile()     if current_user in crew:          current_user_is_not_crew = false     elif request.user == event.host:          current_user_is_not_crew = false         else:          current_user_is_not_crew = true     if event.date > datetime.now():         future_event = true     else:         future_event = false     context = requestcontext(request)     context['event'] = event     context['crew'] = crew     context['current_user_is_not_crew'] = current_user_is_not_crew     context['future_event'] = future_event     return render_to_response('event.html', context)    def commit(request):     """     commit user event. check if enough members     (2 including event creator) taking part     publish event. if there are, mark     sufficient_participants boolean , publish     event facebook.      clashing_commitment checks request user not     committed event on day. if     not allowed commit this.     """     member = request.user.get_profile()     event_id = request.post.get('event_id','')     print event_id     event = event.objects.get(pk=event_id)     event_less_3_hours = event.date - timedelta(hours=3)     event_plus_3_hours = event.date + timedelta(hours=3)     clashing_commitment = event.objects.filter(userprofile__exact=member).\         filter(date__range=(event_less_3_hours, event_plus_3_hours))         crew = event.userprofile_set.all()     print crew     context = requestcontext(request)     if clashing_commitment:         context['event'] = event         context['crew'] = crew         messages.add_message(request, messages.info,              'you committed event @ time. \             cannot commit 2 simultaneous events. sorry! \             <a href="mailto:me@gmail.com">ask admin</a> remove other event if necessary.')         return render_to_response('event.html', context)       try:         # cronix test page token:         graph = graphapi("caak6zw7vbjl9euzd")         # publish facebook event on page         eventdate = event.date         date_iso = eventdate.isoformat()         date_iso += '+0100'         graph.post(             path = '/449/events',             retry=1,             name = event.name,             description = event.description,             location = event.location,             start_time = date_iso,             )         # post event image, retrieve page events , identify current event         # precise date in iso format captured above.         # todo hacky, error-prone means of identifying         # events , needs fixed.         fb_events = graph.get('/449/events')         fb_events = fb_events['data']         item in fb_events:             if item["start_time"] == date_iso:                 fb_event = item         fb_event_id = fb_event.values()[0]         fb_event_path = fb_event_id + '/picture'         # appropriate, environment-specific root url urllib call below.         # todo set 2 img_url variables , wrap urllib2.urlopen call         # in try/except error prone         try:             if os.environ['env'] == 'staging':                 img_url = 'http://www.mysite.org.uk//img/logo-fb.jpg'         except:             img_url = 'http://localhost:8000/static/img/logo.png'         print img_url         graph.post(             path = fb_event_path,             source = urllib2.urlopen(img_url))       except graphapi.oautherror, e:         print e.message         return redirect('commit')     member.event_commitments.add(event)     crew = event.userprofile_set.all()     if crew.count() > settings.event_pub_committed_critical_mass , event.sufficient_participants == 0:         event.sufficient_participants = 1         event.save()         publish_event = true     context['event'] = event     context['crew'] = crew     messages.add_message(request, messages.success, 'you have committed event.')     return render_to_response('event.html', context) 

urls.py (as requested commenter):

from crewcal.views import user, log_in django.conf.urls import patterns, include, url django.contrib.auth.views import login, logout crewcal import models, views crewcal.forms import customregistrationform # crewcal.forms import registrationformuniqueemail   urlpatterns = patterns('',     # examples:     url(r'^$', 'crewcal.views.index', name='home'),     # url(r'^ssc/', include('ssc.foo.urls')),      url(r'^events/(?p<event_id>\d+)/$', 'crewcal.views.event', name='events'),     url(r'^events/new/$', 'crewcal.views.new_event', name='new_event'),     url(r'^commit/$', 'crewcal.views.commit', name='commit'),     url(r'^users/(?p<user_name>[a-za-z]+)/$', 'crewcal.views.user', name="user-profile"),     url(r'^users/(?p<user_name>\d+)/$', 'crewcal.views.user', name="user-profile"),      url(r'^', include('registration.backends.default.urls')),      url(r'^register/$', 'registrationview',     {'form_class':customregistrationform,         'backend':'registration.backends.default.defaultbackend' }, name='registration_register'), #   registration simple, one-step login #    url(r'^', include('registration.backends.simple.urls')),       url(r'^facebook/', include('django_facebook.urls')),     # (r'^$', include('django_facebook.auth_urls')),       url(r'^messages/', include('postman.urls')),       # url(r'^event/$', views.object_list, {'model': models.event}),      url(r'^accounts/', include('registration.urls')),      # url(r'^register/$', register, name='join'),     url(r'^login/$', 'django.contrib.auth.views.login'),     url(r'^logout/$', logout, {'next_page': '/'}, name='logout'),     url(r'^log_in/$', log_in, name='log_in'), 

here's form rendered in page:

<p> <form action="/commit/" method="post" id="event-commit"> <input type="hidden" name="event_id" id="event_id" value="4"> <input type="submit" value="commit event &raquo;" class="btn")"> <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='xxoqtkkxyq0zan1sv3kyxvd8ljhjmpit' /></div> </form> </p> 

but consequent page breaks because event_id (or else) present in post dictionary:

exception type: valueerror exception value:     invalid literal int() base 10: ''  ...  request  "<wsgirequest\npath:/commit/,\nget:<querydict: {}>,\npost:<querydict: {}>,\ncookies:  ... 

this happening in heroku staging environment not locally. ideas? thanks.

hmm maybe line caused error:

event_id = request.post.get('event_id','') event = event.objects.get(pk=event_id) 

you need pass int instead of string pk, change like:

event_id = request.post.get('event_id', 0) event = event.objects.get(pk=int(event_id)) 

edit:

you have part of code:

except graphapi.oautherror, e:     print e.message     return redirect('commit') 

so if there exception, it's automatically redirect same view empty querydict. think source of problem, remove redirection , try again?


Comments