def edit_or_update(request, event):
    if request.method == "POST":
        ef, vf, lf = _process_create_post_data(request.POST)
        if ef.is_valid() and vf.is_valid():
            new_event = ef.instance
            new_event.organiser_email = event.organiser_email
            new_event.verified = event.verified
            new_event.official = event.official
            new_event.campaign = event.campaign
            new_event.source = event.source
            new_event.source_id = event.source_id
            new_venue = vf.instance
            vf.add_geo_data_to(new_venue)
            models.EventAndVenueUpdater.update(event, new_event, event.venue,
                                               new_venue)
            return http.HttpResponseRedirect(
                reverse('event', kwargs={'event_hash': event.hash}))
    else:
        ef = forms.EventForm(instance=event)
        vf = forms.VenueForm(instance=event.venue)
        lf = forms.PrivacyAndLegalForm()
    return _render_event_creation_form(request,
                                       ef,
                                       vf,
                                       lf,
                                       template='events/edit.html',
                                       event=event)
def new(request):
    return _render_event_creation_form(request, forms.EventForm(),
                                       forms.VenueForm(),
                                       forms.PrivacyAndLegalForm())
def _process_create_post_data(data):
    event_form = forms.EventForm(data)
    venue_form = forms.VenueForm(data)
    privacy_and_legal_form = forms.PrivacyAndLegalForm(data)
    return (event_form, venue_form, privacy_and_legal_form)