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 »" 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
Post a Comment