Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2014
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. from django import template
  2. from django.forms.forms import BoundField
  3. from django.template.loader import get_template
  4.  
  5. from aoasurveys.aoaforms.forms import DisplayedForm
  6. from aoasurveys.aoaforms.models import Label
  7.  
  8. register = template.Library()
  9.  
  10.  
  11. class CustomFormNode(template.Node):
  12. def __init__(self, name, value):
  13. self.name = name
  14. self.value = value
  15.  
  16. def render(self, context):
  17. form = template.Variable(self.value).resolve(context)
  18. t = get_template("forms/built_form.html")
  19. context["form"] = form
  20.  
  21. form_for_form = DisplayedForm(
  22. form,
  23. context,
  24. getattr(context["request"], "POST", None),
  25. getattr(context["request"], "FILES", None)
  26. )
  27.  
  28. labels = [
  29. (label, label.order) for label in form.labels.all()
  30. ]
  31. fields_order = {
  32. field.slug: field.order for field in form.fields.visible()
  33. }
  34. fields = [
  35. (value, fields_order[key]) for key, value in
  36. form_for_form.fields.iteritems()
  37. ]
  38. fields_and_labels = [
  39. elem for elem, order in sorted(
  40. labels + fields,
  41. key=lambda (f, o): o
  42. )
  43. ]
  44.  
  45. class FakeForm(object):
  46. def __iter__(self):
  47. for field in fields_and_labels:
  48. if isinstance(field, Label):
  49. yield field
  50. else:
  51. yield BoundField(form_for_form, field, str(field))
  52.  
  53. context['form_for_form'] = form_for_form
  54. context['fields_and_labels'] = FakeForm()
  55. return t.render(context)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement