forms.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from django import forms
  2. from .models import Contrib
  3. ORIENTATIONS = (
  4. ('N', 'Nord'),
  5. ('NO', 'Nord-Ouest'),
  6. ('O', 'Ouest'),
  7. ('SO', 'Sud-Ouest'),
  8. ('S', 'Sud'),
  9. ('SE', 'Sud-Est'),
  10. ('E', 'Est'),
  11. ('NE', 'Nord-Est'),
  12. )
  13. class PublicContribForm(forms.ModelForm):
  14. class Meta:
  15. model = Contrib
  16. fields = [
  17. 'name', 'contrib_type',
  18. 'latitude', 'longitude',
  19. 'phone', 'email',
  20. 'comment',
  21. 'access_type',
  22. 'connect_local', 'connect_internet',
  23. 'bandwidth', 'share_part',
  24. 'floor', 'floor_total', 'orientations', 'roof',
  25. 'comment',
  26. 'privacy_name', 'privacy_email', 'privacy_coordinates',
  27. 'privacy_place_details', 'privacy_comment',
  28. ]
  29. widgets = {
  30. 'contrib_type': forms.RadioSelect,
  31. 'latitude': forms.HiddenInput,
  32. 'longitude': forms.HiddenInput,
  33. 'access_type': forms.RadioSelect,
  34. 'connect_local': forms.CheckboxInput,
  35. 'connect_internet': forms.CheckboxInput,
  36. 'comment': forms.Textarea({'rows': 3}),
  37. 'floor': forms.TextInput(
  38. attrs={'placeholder': "Étage (0 pour RDC)"}),
  39. 'floor_total': forms.TextInput(
  40. attrs={'placeholder': "Nb. d'étages du bâtiment"}),
  41. }
  42. # Widget rendering is managed by hand in template for orientions.
  43. orientations = forms.MultipleChoiceField(choices=ORIENTATIONS)
  44. def __init__(self, *args, **kwargs):
  45. super(PublicContribForm, self).__init__(*args, **kwargs)
  46. for f in self.errors:
  47. field = self.fields[f]
  48. classes = ["error", (field.widget.attrs['class'] if 'class' in field.widget.attrs else "")]
  49. field.widget.attrs['class'] = classes
  50. _privacy_fieldnames = (
  51. 'privacy_name', 'privacy_email', 'privacy_coordinates',
  52. 'privacy_place_details', 'privacy_comment',
  53. )
  54. def privacy_fields(self):
  55. for i in self._privacy_fieldnames:
  56. field = self[i]
  57. # FIXME: What a hack
  58. field.label = field.label\
  59. .replace('public', '')\
  60. .replace('publiques', '')
  61. yield field