Пример #1
0
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
    )