forms.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. from django import forms
  2. from django.conf import settings
  3. from .models import *
  4. from django.contrib.auth.forms import UserCreationForm
  5. from django_file_form.forms import UploadedFileField, FileFormMixin, CharField, MultipleUploadedFileField
  6. from django.contrib.auth.models import User
  7. from crispy_forms.helper import FormHelper
  8. # from crispy_forms.layout.buttons import Submit, InputButton
  9. from crispy_forms.layout import Layout, Field, Fieldset, Div, Row, Column, HTML, ButtonHolder, Submit
  10. from crispy_forms.bootstrap import InlineField
  11. from django.forms.models import inlineformset_factory
  12. from django.forms import formset_factory
  13. from django import forms
  14. from captcha.fields import CaptchaField
  15. from django.core.files import File
  16. from marktplatz.widgets import *
  17. from django.forms.widgets import HiddenInput
  18. def extend_help_text( help_text, myList ):
  19. extended_text = help_text
  20. extended_text += " z.B. "
  21. for x in myList:
  22. extended_text += x[1] + ", "
  23. extended_text = extended_text[:-2]
  24. extended_text += "."
  25. return extended_text
  26. class textSearchForm(forms.Form):
  27. mywidget = forms.TextInput( attrs={'onfocus': "this.value=''", 'class' : "border-thin"} )
  28. searchText = forms.CharField ( label='', widget = mywidget, max_length = 2048, min_length=3, empty_value="Suche...", initial='Suche...' )
  29. def __init__(self, *args, **kwargs):
  30. super(textSearchForm, self).__init__(*args, **kwargs)
  31. self.helper = FormHelper()
  32. self.helper.form_tag = False
  33. self.helper.layout = Layout(
  34. Div(
  35. Div('searchText', css_class='col-sm-6 col-6'),
  36. Div(
  37. ButtonHolder(
  38. Submit('submit', 'Suche', css_class='border-thin border-dark mybtn')
  39. ),
  40. css_class='col-sm-6 col-6'),
  41. css_class='form-row row'),
  42. # Submit('submit', 'Submit', css_class='btn border-dark rounded-0 mybtn'),
  43. )
  44. class searchAgentForm(forms.ModelForm):
  45. class Meta:
  46. model = SearchAgent
  47. fields = '__all__'
  48. # fields = ('first_name','last_name','adress','postcode','city','country', 'email','phonenumber','alternate_phonenumber','skype_name','website', 'terms')
  49. class RegisterForm(forms.ModelForm):
  50. terms = forms.BooleanField(required=True, label= ('I accept and have read the <a href="https://www.mediaarchitecture.org/privacy-policy/">Privacy Policy.</a>'))
  51. class Meta:
  52. model = Contact
  53. fields = ('first_name','last_name','adress','postcode','city','country',
  54. 'email','phonenumber','alternate_phonenumber','skype_name','website', 'terms')
  55. class SignUpForm(UserCreationForm):
  56. captcha = CaptchaField( generator='captcha.helpers.math_challenge' )
  57. class Meta:
  58. model = User
  59. fields = ('username', 'password1', 'password2')
  60. class ProductForm(forms.ModelForm):
  61. terms = forms.BooleanField(required=True, label= ('Ich habe die Teilnahmebedingungen gelesen und akzeptiert.'))
  62. product_fields = ( 'terms', 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei','ort','rechtsform','orga','mitmachen','edit','public', )
  63. product_layout = Layout(
  64. Fieldset(
  65. ('Über dein Projekt'),
  66. 'name','claim','beschreibung','learning','status',
  67. Div(
  68. Div('adresse', css_class='col-sm-6 col-6'),
  69. Div('ort', css_class='col-sm-6 col-6'),
  70. css_class='form-row row'),
  71. Div(
  72. Div('frei', css_class='col-sm-6 col-6'),
  73. Div('kfrei', css_class='col-sm-6 col-6'),
  74. css_class='form-row row'),
  75. 'mitmachen','rechtsform','orga',
  76. Div(
  77. Div('website', css_class='col-sm-6 col-6'),
  78. Div('email', css_class='col-sm-6 col-6'),
  79. css_class='form-row row'),
  80. Div(
  81. Div('gruendungsjahr', css_class='col-sm-6 col-6'),
  82. Div('betriebgenommen', css_class='col-sm-6 col-6'),
  83. css_class='form-row row'),
  84. 'edit','public',
  85. ),
  86. )
  87. class Meta:
  88. model = Product
  89. fields = (
  90. 'terms',
  91. 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei', 'mitmachen','rechtsform','ort','orga',
  92. )
  93. def __init__(self,*args, **kwargs):
  94. super(ProductForm, self).__init__(*args, **kwargs)
  95. self.fields['orga'].widget = ListTextWidget(data_list=Product.ORGANIZATION, name='orga_list')
  96. self.fields['rechtsform'].widget = ListTextWidget(data_list=Product.RECHTSFORM, name='rechtsform_list')
  97. self.fields['edit'].widget = HiddenInput()
  98. self.fields['public'].widget = HiddenInput()
  99. #
  100. # extend_help_text
  101. #
  102. self.fields['orga'].help_text = extend_help_text (self.fields['orga'].help_text, Product.ORGANIZATION)
  103. self.fields['rechtsform'].help_text = extend_help_text (self.fields['rechtsform'].help_text, Product.RECHTSFORM)
  104. self.helper = FormHelper()
  105. self.helper.form_tag = False
  106. class WohnprojektForm(ProductForm):
  107. terms = forms.BooleanField(required=True, label= ('Ich habe die Teilnahmebedingungen gelesen und akzeptiert.'))
  108. class Meta:
  109. model = Wohnprojekt
  110. fields = ProductForm.product_fields + (
  111. 'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger', 'aerwachsene', 'akinder', 'awohnungen', 'wohnflaeche', 'gewerbeflaechen', 'gemeinschaftsflaeche', 'sonstige_flaechen', 'kflaechen', 'gemeinschaftr', 'kgemeinschaftr', 'sonderwohnformen', 'raumangebot', 'kraumangebot', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
  112. )
  113. def __init__(self,*args, **kwargs):
  114. super(WohnprojektForm, self).__init__(*args, **kwargs)
  115. #
  116. #
  117. self.fields['artmodell'].widget = ListTextWidget(data_list=Wohnprojekt.ARTMODELL, name='artmodell_list')
  118. self.fields['bautraeger'].widget = ListTextWidget(data_list=Wohnprojekt.BAUTRAEGER, name='bautraeger_list')
  119. self.fields['bauweise'].widget = ListTextWidget(data_list=Wohnprojekt.BAUWEISE, name='bauweise_list')
  120. self.fields['zielgruppen'].widget = ListTextWidget(data_list=Wohnprojekt.ZIELGRUPPEN, name='zielgruppen_list')
  121. self.fields['gprojekte'].widget = ListTextWidget(data_list=Wohnprojekt.GPROJEKTE, name='gprojekte_list')
  122. #
  123. #
  124. self.fields['bauweise'].help_text = extend_help_text (self.fields['bauweise'].help_text, Wohnprojekt.BAUWEISE)
  125. self.fields['zielgruppen'].help_text = extend_help_text (self.fields['zielgruppen'].help_text, Wohnprojekt.ZIELGRUPPEN)
  126. self.fields['gprojekte'].help_text = extend_help_text (self.fields['gprojekte'].help_text, Wohnprojekt.GPROJEKTE)
  127. #
  128. #
  129. self.helper = FormHelper()
  130. self.helper.form_tag = False
  131. self.helper.layout = Layout(
  132. self.product_layout,
  133. Fieldset(
  134. 'Wohnprojekt',
  135. 'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger',
  136. Div(
  137. Div('aerwachsene', css_class='col-sm-6 col-6'),
  138. Div('akinder', css_class='col-sm-6 col-6'),
  139. css_class='form-row row'),
  140. 'awohnungen',
  141. Fieldset ( 'FLächen',
  142. Div(
  143. Div('wohnflaeche', css_class='col-sm-3 col-3'),
  144. Div('gewerbeflaechen', css_class='col-sm-3 col-3'),
  145. Div('gemeinschaftsflaeche', css_class='col-sm-3 col-3'),
  146. Div('sonstige_flaechen', css_class='col-sm-3 col-3'),
  147. css_class='form-row row'),
  148. 'kflaechen',
  149. ),
  150. Div(
  151. Div('gemeinschaftr', css_class='col-sm-6 col-6'),
  152. Div('raumangebot', css_class='col-sm-6 col-6'),
  153. Div('kgemeinschaftr', css_class='col-sm-6 col-6'),
  154. Div('kraumangebot', css_class='col-sm-6 col-6'),
  155. css_class='form-row row'),
  156. 'sonderwohnformen', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
  157. )
  158. )
  159. class InteractionForm(forms.ModelForm):
  160. class Meta:
  161. model = Interaction
  162. fields = ('communtity','host','legal_form','issues','impact','tools','tools_used','next_steps')
  163. def __init__(self, *args, **kwargs):
  164. super(InteractionForm, self).__init__(*args, **kwargs)
  165. self.helper = FormHelper()
  166. self.helper.form_tag = False
  167. self.helper.layout = Layout(
  168. Fieldset(
  169. ('Community Ascpects - not mandatory'),
  170. Div(Div('communtity', css_class='form-group col-md-6 mb-0'),
  171. Div('issues', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  172. Div(Div('legal_form', css_class='form-group col-md-6 mb-0'),
  173. Div('host', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  174. Div(Div('impact', css_class='form-group col-md-6 mb-0'),
  175. Div('tools', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  176. Div(Div('tools_used', css_class='form-group col-md-6 mb-0'),
  177. Div('next_steps', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  178. ))
  179. class LinkForm(forms.ModelForm):
  180. class Meta:
  181. model = Link
  182. fields = ('link_description','link')
  183. #def __init__(self, *args, **kwargs):
  184. # super(LinkForm, self).__init__(*args, **kwargs)
  185. # self.helper = FormHelper()
  186. # self.helper.field_class = 'form_border'
  187. # self.helper.form_tag = False
  188. # self.helper.layout = Layout(
  189. # Fieldset(
  190. # Div(Div('link_description', css_class='form-group col-md-5 mb-0'),
  191. # Div('link', css_class='form-group col-md-5 mb-0'),
  192. # css_class='form-row')
  193. # ))
  194. LinkFormSet = inlineformset_factory(Product,Link, fields = ['link_description','link'], form=LinkForm, extra=3, can_delete=False)
  195. class FormsetHelper(FormHelper):
  196. def __init__(self,*args, **kwargs):
  197. super(FormsetHelper, self).__init__(*args, **kwargs)
  198. #self.form_method = 'post'
  199. self.form_tag = False
  200. #self.render_hidden_fields = True
  201. #self.render_required_fields = True
  202. self.layout = Layout(
  203. Fieldset(
  204. (''),
  205. Div(
  206. Div('link_description', css_class='form-group col-md-4 mb-0'),
  207. Div('link', css_class='form-group col-md-6 mb-0')
  208. , css_class='form-row')
  209. ))
  210. class MediaForm(FileFormMixin, forms.Form):
  211. image = UploadedFileField()
  212. name_for = CharField()
  213. copyright = CharField()
  214. #prefix = 'upload'
  215. def __init__(self, *args, **kwargs):
  216. super(MediaForm, self).__init__(*args, **kwargs)
  217. self.helper = FormHelper()
  218. self.helper.form_tag = False
  219. self.fields['name_for'].label = 'Bildbeschriftung'
  220. self.fields['copyright'].label = 'Copyright von'
  221. self.fields['image'].label = 'Bild oder Video'
  222. self.fields['image'].help_text = 'Bitte laden Sie Bilder im PNG- oder JPEG-Format hoch. Laden Sie Videos im MP4-Format hoch.'
  223. self.layout = Layout(
  224. Fieldset(
  225. (''),
  226. Div(
  227. Div('name_for', css_class='form-group col-md-6 mb-0'),
  228. Div('copyright', css_class='form-group col-md-4 mb-0')
  229. , css_class='form-row'),
  230. Div(
  231. Div('image', css_class='form-group col-md-6 mb-0'),
  232. css_class='form-row'),
  233. ))
  234. class MediaForm_test(FileFormMixin, forms.Form):
  235. image = UploadedFileField()
  236. name_for = CharField()
  237. copyright = CharField()
  238. def __init__(self, *args, **kwargs):
  239. super(MediaForm_test, self).__init__(*args, **kwargs)
  240. self.helper = FormHelper()
  241. self.helper.form_tag = False
  242. class MediaForm1(FileFormMixin, forms.Form):
  243. image = MultipleUploadedFileField()
  244. name_for = CharField()
  245. copyright = CharField()
  246. def __init__(self, *args, **kwargs):
  247. super(MediaForm1, self).__init__(*args, **kwargs)
  248. self.helper = FormHelper()
  249. self.helper.form_tag = False
  250. class MediaForm2(FileFormMixin,forms.Form):
  251. image = UploadedFileField()
  252. name_for = CharField()
  253. copyright = CharField()
  254. def __init__(self, *args, **kwargs):
  255. super(MediaForm2, self).__init__(*args, **kwargs)
  256. self.helper = FormHelper()
  257. self.helper.form_tag = False
  258. MediaFormSet = formset_factory(MediaForm_test, extra=3)
  259. class MediaFormsetHelper(FormHelper):
  260. def __init__(self,*args, **kwargs):
  261. super(MediaFormsetHelper, self).__init__(*args, **kwargs)
  262. self.form_tag = False
  263. self.layout = Layout(
  264. Fieldset(
  265. (''),
  266. Div(
  267. Div('name_for', css_class='form-group col-md-6 mb-0'),
  268. Div('copyright', css_class='form-group col-md-4 mb-0')
  269. , css_class='form-row'),
  270. Div(
  271. Div('image', css_class='form-group col-md-6 mb-0'),
  272. css_class='form-row'),
  273. ))
  274. class VideoForm(forms.ModelForm):
  275. class Meta:
  276. model = Video
  277. fields = ('name_for','copyright','image')