mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-06 09:57:57 +00:00

with the logged in user as the first manager, or they become orphans before they're even created...
70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
from django.shortcuts import render_to_response, get_object_or_404
|
|
from pgweb.util.contexts import NavContext
|
|
from django.http import HttpResponseRedirect
|
|
from django.template import Context
|
|
from django.template.loader import get_template
|
|
import django.utils.xmlutils
|
|
|
|
def simple_form(instancetype, itemid, request, formclass, formtemplate='base/form.html', redirect='/account/', navsection='account', fixedfields=None):
|
|
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()
|
|
|
|
# In case fixedfields include a manytomany field, we need to make sure the main form is saved first,
|
|
# so we can access the field without an exception.
|
|
if fixedfields:
|
|
for k,v in fixedfields.items():
|
|
setattr(r, k, v)
|
|
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))
|
|
|
|
def template_to_string(templatename, attrs = {}):
|
|
return get_template(templatename).render(Context(attrs))
|
|
|
|
|
|
class PgXmlHelper(django.utils.xmlutils.SimplerXMLGenerator):
|
|
def __init__(self, outstream, skipempty=False):
|
|
django.utils.xmlutils.SimplerXMLGenerator.__init__(self, outstream, 'utf-8')
|
|
self.skipempty = skipempty
|
|
|
|
def add_xml_element(self, name, value):
|
|
if self.skipempty and value=='': return
|
|
self.startElement(name, {})
|
|
self.characters(value)
|
|
self.endElement(name)
|
|
|