Files
postgres-web/pgweb/util/helpers.py
Magnus Hagander e41c85bd00 Support short introductory text on a form driven from the model,
without the need to create a separate template. (Anything more
advanced should still use a template, of course)
2009-12-28 14:18:53 +01:00

44 lines
1.5 KiB
Python

from django.shortcuts import render_to_response, get_object_or_404
from pgweb.util.contexts import NavContext
from django.http import HttpResponseRedirect
def simple_form(instancetype, itemid, request, formclass, formtemplate='base/form.html', redirect='/account/', navsection='account'):
if itemid == 'new':
instance = instancetype()
else:
# Regular news item, attempt to edit it
instance = get_object_or_404(instancetype, pk=itemid)
if hasattr(instance, 'submitter'):
if not instance.submitter == request.user:
raise Exception("You are not the owner of this item!")
elif hasattr(instance, 'verify_submitter'):
if not instance.verify_submitter(request.user):
raise Exception("You are not the owner of this item!")
if request.method == 'POST':
# Process this form
form = formclass(data=request.POST, instance=instance)
if form.is_valid():
r = form.save(commit=False)
r.submitter = request.user
r.save()
return HttpResponseRedirect(redirect)
else:
# Generate form
form = formclass(instance=instance)
if hasattr(form, 'filter_by_user'):
form.filter_by_user(request.user)
if hasattr(instancetype, 'markdown_fields'):
markdownfields = instancetype.markdown_fields
else:
markdownfields = None
return render_to_response(formtemplate, {
'form': form,
'formitemtype': instance._meta.verbose_name,
'markdownfields': markdownfields,
'form_intro': hasattr(form, 'form_intro') and form.form_intro or None,
}, NavContext(request, navsection))