forms.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. from django import forms
  2. from django.conf import settings
  3. from django.core.files import File
  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 django.urls import reverse, reverse_lazy
  8. from django.forms import formset_factory
  9. from django.forms.widgets import HiddenInput
  10. from django.forms.models import inlineformset_factory
  11. # from crispy_forms.layout.buttons import Submit, InputButton
  12. from crispy_forms.layout import Layout, Field, Fieldset, Div, Row, Column, HTML, ButtonHolder, Submit
  13. from crispy_forms.bootstrap import InlineField
  14. from crispy_forms.helper import FormHelper
  15. from captcha.fields import CaptchaField
  16. from newsletter.forms import *
  17. from marktplatz.widgets import *
  18. from .models import *
  19. from .urls import *
  20. def extend_help_text( help_text, myList ):
  21. extended_text = help_text
  22. extended_text += " z.B. "
  23. for x in myList:
  24. extended_text += x[1] + ", "
  25. extended_text = extended_text[:-2]
  26. extended_text += "."
  27. return extended_text
  28. class textSearchForm(forms.Form):
  29. mywidget = forms.TextInput( attrs={'onfocus': "this.value=''", 'class' : "border-thin"} )
  30. searchText = forms.CharField ( label='', widget = mywidget, max_length = 2048, min_length=3, empty_value="Suche...", initial='Suche...' )
  31. def __init__(self, *args, **kwargs):
  32. super(textSearchForm, self).__init__(*args, **kwargs)
  33. self.helper = FormHelper()
  34. self.helper.form_tag = False
  35. self.helper.layout = Layout(
  36. Div(
  37. Div('searchText', css_class='col-sm-6 col-6'),
  38. Div(
  39. ButtonHolder(
  40. Submit('submit', 'Suche', css_class='border-thin border-dark mybtn')
  41. ),
  42. css_class='col-sm-6 col-6'),
  43. css_class='form-row row'),
  44. # Submit('submit', 'Submit', css_class='btn border-dark rounded-0 mybtn'),
  45. )
  46. class searchAgentForm(forms.ModelForm):
  47. class Meta:
  48. model = SearchAgent
  49. fields = ('ort', 'email')
  50. agent_layout = Layout(
  51. Fieldset(
  52. ('Suchagent'),
  53. 'ort',
  54. ),
  55. )
  56. class AgentNewslwtterForm(forms.Form, searchAgentForm):
  57. email_field = forms.EmailField( label = 'Email', required=True, max_length=254 )
  58. subscribe = forms.BooleanField( label = 'Newsletter abonnieren', help_text='', required = False )
  59. captcha = CaptchaField( label = 'Bitte lösen Sie die Gleichung', generator='captcha.helpers.math_challenge' )
  60. # def clean(self):
  61. # # Then call the clean() method of the super class
  62. # cleaned_data = super(AgentNewslwtterForm, self).clean()
  63. # cleaned_data['email'] = cleaned_data['email_field']
  64. # return cleaned_data
  65. def __init__(self, *args, **kwargs):
  66. super(searchAgentForm, self).__init__(*args, **kwargs)
  67. self.helper = FormHelper(self)
  68. self.helper.attrs = { 'enctype' : "multipart/form-data" }
  69. self.helper.form_action = reverse('agent-newsletter-create', kwargs={'newsletter_slug': "test_news"} )
  70. self.helper.layout = Layout(
  71. self.agent_layout,
  72. 'email_field',
  73. 'subscribe',
  74. 'captcha',
  75. ButtonHolder(
  76. Submit('submit', 'Anmelden', css_class='border-thin border-dark mybtn')
  77. ),
  78. # Submit('submit', 'Submit', css_class='btn border-dark rounded-0 mybtn'),
  79. )
  80. # class MarktSubscribeRequestForm(SubscribeRequestForm, searchAgentForm):
  81. # """
  82. # Request subscription to the newsletter. Will result in an activation email
  83. # being sent with a link where one can edit, confirm and activate one's
  84. # subscription.
  85. # """
  86. #
  87. # newsletter = Newsletter.objects.get(title="Test")
  88. # subscribeForm = SubscribeRequestForm(request.POST or None, newsletter=newsletter)
  89. #
  90. # def __init__(self, *args, **kwargs):
  91. # super(MarktSubscribeRequestForm, self).__init__(*args, **kwargs)
  92. # self.helper = FormHelper()
  93. # # self.helper.form_tag = False
  94. # self.helper.layout = Layout(
  95. # self.agent_layout,
  96. # 'email_field',
  97. #
  98. # # Submit('submit', 'Submit', css_class='btn border-dark rounded-0 mybtn'),
  99. #
  100. # )
  101. class RegisterForm(forms.ModelForm):
  102. drurl = reverse_lazy( 'pages-generic', kwargs= { 'page': 'DATENSCHUTZRICHTLINIE' } )
  103. terms = forms.BooleanField(required=True, label= ('Ich akzeptiere die <a href="{}"> Datenschutzrichtlinie und habe sie gelesen.</a>' ) )
  104. class Meta:
  105. model = Contact
  106. fields = ('first_name','last_name','adress','postcode','city','country',
  107. 'email','phonenumber','alternate_phonenumber','skype_name','website', 'terms')
  108. def __init__(self, *args, **kwargs):
  109. super(RegisterForm, self).__init__(*args, **kwargs)
  110. drurl = reverse_lazy( 'pages-generic', kwargs= { 'page': 'DATENSCHUTZRICHTLINIE' } )
  111. tmurl = reverse_lazy( 'pages-generic', kwargs= { 'page': 'TEILNAHME' } )
  112. self.fields ['terms'].label = 'Ich akzeptiere die <a href="{}"> Datenschutzrichtlinie</a> sowie die <a href="{}"> Teilnahmebedingungen</a> und habe sie gelesen.'.format(drurl, tmurl)
  113. class SignUpForm(UserCreationForm):
  114. captcha = CaptchaField( generator='captcha.helpers.math_challenge' )
  115. class Meta:
  116. model = User
  117. fields = ('username', 'password1', 'password2')
  118. class ProductForm(forms.ModelForm):
  119. terms = forms.BooleanField(required=True, label= ('Ich habe die Teilnahmebedingungen gelesen und akzeptiert.'))
  120. product_fields = ( 'terms', 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei','ort','rechtsform','orga','mitmachen','edit','public', )
  121. product_layout = Layout(
  122. Fieldset(
  123. ('Über dein Projekt'),
  124. 'name','claim','beschreibung','learning','status',
  125. Div(
  126. Div('adresse', css_class='col-sm-6 col-6'),
  127. Div('ort', css_class='col-sm-6 col-6'),
  128. css_class='form-row row'),
  129. Div(
  130. Div('frei', css_class='col-sm-6 col-6'),
  131. Div('kfrei', css_class='col-sm-6 col-6'),
  132. css_class='form-row row'),
  133. 'mitmachen','rechtsform','orga',
  134. Div(
  135. Div('website', css_class='col-sm-6 col-6'),
  136. Div('email', css_class='col-sm-6 col-6'),
  137. css_class='form-row row'),
  138. Div(
  139. Div('gruendungsjahr', css_class='col-sm-6 col-6'),
  140. Div('betriebgenommen', css_class='col-sm-6 col-6'),
  141. css_class='form-row row'),
  142. 'edit','public',
  143. ),
  144. )
  145. class Meta:
  146. model = Product
  147. fields = (
  148. 'terms',
  149. 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei', 'mitmachen','rechtsform','ort','orga',
  150. )
  151. def __init__(self,*args, **kwargs):
  152. super(ProductForm, self).__init__(*args, **kwargs)
  153. self.fields['orga'].widget = ListTextWidget(data_list=Product.ORGANIZATION, name='orga_list')
  154. self.fields['rechtsform'].widget = ListTextWidget(data_list=Product.RECHTSFORM, name='rechtsform_list')
  155. self.fields['edit'].widget = HiddenInput()
  156. self.fields['public'].widget = HiddenInput()
  157. #
  158. # extend_help_text
  159. #
  160. self.fields['orga'].help_text = extend_help_text (self.fields['orga'].help_text, Product.ORGANIZATION)
  161. self.fields['rechtsform'].help_text = extend_help_text (self.fields['rechtsform'].help_text, Product.RECHTSFORM)
  162. self.helper = FormHelper()
  163. self.helper.form_tag = False
  164. class WohnprojektForm(ProductForm):
  165. terms = forms.BooleanField(required=True, label= ('Ich habe die Teilnahmebedingungen gelesen und akzeptiert.'))
  166. class Meta:
  167. model = Wohnprojekt
  168. fields = ProductForm.product_fields + (
  169. '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',
  170. )
  171. def __init__(self,*args, **kwargs):
  172. super(WohnprojektForm, self).__init__(*args, **kwargs)
  173. #
  174. #
  175. self.fields['artmodell'].widget = ListTextWidget(data_list=Wohnprojekt.ARTMODELL, name='artmodell_list')
  176. self.fields['bautraeger'].widget = ListTextWidget(data_list=Wohnprojekt.BAUTRAEGER, name='bautraeger_list')
  177. self.fields['bauweise'].widget = ListTextWidget(data_list=Wohnprojekt.BAUWEISE, name='bauweise_list')
  178. self.fields['zielgruppen'].widget = ListTextWidget(data_list=Wohnprojekt.ZIELGRUPPEN, name='zielgruppen_list')
  179. self.fields['gprojekte'].widget = ListTextWidget(data_list=Wohnprojekt.GPROJEKTE, name='gprojekte_list')
  180. #
  181. #
  182. self.fields['bauweise'].help_text = extend_help_text (self.fields['bauweise'].help_text, Wohnprojekt.BAUWEISE)
  183. self.fields['zielgruppen'].help_text = extend_help_text (self.fields['zielgruppen'].help_text, Wohnprojekt.ZIELGRUPPEN)
  184. self.fields['gprojekte'].help_text = extend_help_text (self.fields['gprojekte'].help_text, Wohnprojekt.GPROJEKTE)
  185. #
  186. #
  187. self.helper = FormHelper()
  188. self.helper.form_tag = False
  189. self.helper.layout = Layout(
  190. self.product_layout,
  191. Fieldset(
  192. 'Wohnprojekt',
  193. 'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger',
  194. Div(
  195. Div('aerwachsene', css_class='col-sm-6 col-6'),
  196. Div('akinder', css_class='col-sm-6 col-6'),
  197. css_class='form-row row'),
  198. 'awohnungen',
  199. Fieldset ( 'Flächen',
  200. Div(
  201. Div('wohnflaeche', css_class='col-sm-3 col-3'),
  202. Div('gewerbeflaechen', css_class='col-sm-3 col-3'),
  203. Div('gemeinschaftsflaeche', css_class='col-sm-3 col-3'),
  204. Div('sonstige_flaechen', css_class='col-sm-3 col-3'),
  205. css_class='form-row row'),
  206. 'kflaechen',
  207. ),
  208. Div(
  209. Div('gemeinschaftr', css_class='col-sm-6 col-6'),
  210. Div('raumangebot', css_class='col-sm-6 col-6'),
  211. Div('kgemeinschaftr', css_class='col-sm-6 col-6'),
  212. Div('kraumangebot', css_class='col-sm-6 col-6'),
  213. css_class='form-row row'),
  214. 'sonderwohnformen', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
  215. )
  216. )
  217. class InteractionForm(forms.ModelForm):
  218. class Meta:
  219. model = Interaction
  220. fields = ('communtity','host','legal_form','issues','impact','tools','tools_used','next_steps')
  221. def __init__(self, *args, **kwargs):
  222. super(InteractionForm, self).__init__(*args, **kwargs)
  223. self.helper = FormHelper()
  224. self.helper.form_tag = False
  225. self.helper.layout = Layout(
  226. Fieldset(
  227. ('Community Ascpects - not mandatory'),
  228. Div(Div('communtity', css_class='form-group col-md-6 mb-0'),
  229. Div('issues', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  230. Div(Div('legal_form', css_class='form-group col-md-6 mb-0'),
  231. Div('host', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  232. Div(Div('impact', css_class='form-group col-md-6 mb-0'),
  233. Div('tools', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  234. Div(Div('tools_used', css_class='form-group col-md-6 mb-0'),
  235. Div('next_steps', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  236. ))
  237. class LinkForm(forms.ModelForm):
  238. class Meta:
  239. model = Link
  240. fields = ('link_description','link')
  241. #def __init__(self, *args, **kwargs):
  242. # super(LinkForm, self).__init__(*args, **kwargs)
  243. # self.helper = FormHelper()
  244. # self.helper.field_class = 'form_border'
  245. # self.helper.form_tag = False
  246. # self.helper.layout = Layout(
  247. # Fieldset(
  248. # Div(Div('link_description', css_class='form-group col-md-5 mb-0'),
  249. # Div('link', css_class='form-group col-md-5 mb-0'),
  250. # css_class='form-row')
  251. # ))
  252. LinkFormSet = inlineformset_factory(Product,Link, fields = ['link_description','link'], form=LinkForm, extra=3, can_delete=False)
  253. class FormsetHelper(FormHelper):
  254. def __init__(self,*args, **kwargs):
  255. super(FormsetHelper, self).__init__(*args, **kwargs)
  256. #self.form_method = 'post'
  257. self.form_tag = False
  258. #self.render_hidden_fields = True
  259. #self.render_required_fields = True
  260. self.layout = Layout(
  261. Fieldset(
  262. (''),
  263. Div(
  264. Div('link_description', css_class='form-group col-md-4 mb-0'),
  265. Div('link', css_class='form-group col-md-6 mb-0')
  266. , css_class='form-row')
  267. ))
  268. class MediaForm(FileFormMixin, forms.Form):
  269. image = UploadedFileField()
  270. name_for = CharField()
  271. copyright = CharField()
  272. #prefix = 'upload'
  273. def __init__(self, *args, **kwargs):
  274. super(MediaForm, self).__init__(*args, **kwargs)
  275. self.helper = FormHelper()
  276. self.helper.form_tag = False
  277. self.fields['name_for'].label = 'Bildbeschriftung'
  278. self.fields['copyright'].label = 'Copyright von'
  279. self.fields['image'].label = 'Bild oder Video'
  280. self.fields['image'].help_text = 'Bitte laden Sie Bilder im PNG- oder JPEG-Format hoch. Laden Sie Videos im MP4-Format hoch.'
  281. self.layout = Layout(
  282. Fieldset(
  283. (''),
  284. Div(
  285. Div('name_for', css_class='form-group col-md-6 mb-0'),
  286. Div('copyright', css_class='form-group col-md-4 mb-0')
  287. , css_class='form-row'),
  288. Div(
  289. Div('image', css_class='form-group col-md-6 mb-0'),
  290. css_class='form-row'),
  291. ))
  292. class MediaForm_test(FileFormMixin, forms.Form):
  293. image = UploadedFileField()
  294. name_for = CharField()
  295. copyright = CharField()
  296. def __init__(self, *args, **kwargs):
  297. super(MediaForm_test, self).__init__(*args, **kwargs)
  298. self.helper = FormHelper()
  299. self.helper.form_tag = False
  300. class MediaForm1(FileFormMixin, forms.Form):
  301. image = MultipleUploadedFileField()
  302. name_for = CharField()
  303. copyright = CharField()
  304. def __init__(self, *args, **kwargs):
  305. super(MediaForm1, self).__init__(*args, **kwargs)
  306. self.helper = FormHelper()
  307. self.helper.form_tag = False
  308. class MediaForm2(FileFormMixin,forms.Form):
  309. image = UploadedFileField()
  310. name_for = CharField()
  311. copyright = CharField()
  312. def __init__(self, *args, **kwargs):
  313. super(MediaForm2, self).__init__(*args, **kwargs)
  314. self.helper = FormHelper()
  315. self.helper.form_tag = False
  316. MediaFormSet = formset_factory(MediaForm_test, extra=3)
  317. class MediaFormsetHelper(FormHelper):
  318. def __init__(self,*args, **kwargs):
  319. super(MediaFormsetHelper, self).__init__(*args, **kwargs)
  320. self.form_tag = False
  321. self.layout = Layout(
  322. Fieldset(
  323. (''),
  324. Div(
  325. Div('name_for', css_class='form-group col-md-6 mb-0'),
  326. Div('copyright', css_class='form-group col-md-4 mb-0')
  327. , css_class='form-row'),
  328. Div(
  329. Div('image', css_class='form-group col-md-6 mb-0'),
  330. css_class='form-row'),
  331. ))
  332. class VideoForm(forms.ModelForm):
  333. class Meta:
  334. model = Video
  335. fields = ('name_for','copyright','image')