def create_series(request, extra_context=None): """ Creates a new series. """ dtstart = None if request.method == 'POST': event_form = SeriesForm(request.POST) recurrence_form = MonthlyReadingMultipleOccurrenceForm(request.POST) if event_form.is_valid() and recurrence_form.is_valid(): # We are creating a new reading series, so give it the current user as the contact sr = event_form.save(commit=False) sr.contact = request.user sr.event_type = EventType.objects.get(pk=1) sr.site = CitySite.objects.get(pk=settings.SITE_ID) sr.save() event_form.save_m2m() # Saving this form saves the Series (and its underlying Event) and # creates the Readings (and their underlying Occurrences) with foreign keys # back to the Series (and Event). recurrence_form.save(sr) tweet_message = ["New series: %s!" % sr.title] _send_tweet(request, sr=sr, tweet_message=tweet_message) return HttpResponseRedirect(sr.get_absolute_url()) else: # not valid # This is for logging only. The forms are already created and will be returned with errors for the user to correct. if settings.DEBUG: print "\n".join(["form is not valid.", "event_form errors = %s" % event_form.errors, "recurrence_form errors = %s" % recurrence_form.errors]) else: # not POST, so we create blank forms with a default start time of 5 pm today. if 'dtstart' in request.GET: try: dtstart = parser.parse(request.GET['dtstart']) except: pass if dtstart == None: today = datetime.today().date() dtstart = datetime(today.year, today.month, today.day, 17, 0, 0) event_form = SeriesForm() recurrence_form = MonthlyReadingMultipleOccurrenceForm(initial=dict(dtstart=dtstart)) if extra_context is None: extra_context = {} context = RequestContext(request) for key, value in extra_context.items(): context[key] = callable(value) and value() or value return render_to_response( "create_series.html", dict(dtstart=dtstart, event_form=event_form, recurrence_form=recurrence_form), context_instance=context )