forms.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  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 import Layout, Field, Fieldset, Div, Row, Column, HTML, ButtonHolder, Submit
  9. from crispy_forms.bootstrap import InlineField
  10. from django.forms.models import inlineformset_factory
  11. from django.forms import formset_factory
  12. from django import forms
  13. from captcha.fields import CaptchaField
  14. from django.core.files import File
  15. from marktplatz.widgets import *
  16. class VoteForm(forms.Form):
  17. aestethic = forms.DecimalField(label='Aesthetic Qualities', max_value=10, decimal_places =1,required=False)
  18. innovation = forms.DecimalField(label='Innovative Elements',max_value=10, decimal_places =1,required=False)
  19. technical = forms.DecimalField(label='Technical Qualities', max_value=10, decimal_places =1,required=False)
  20. integration = forms.DecimalField(label='Integration of diffrent Components',
  21. max_value=10, decimal_places=1,
  22. help_text='e.g. architecture,display and content',required=False)
  23. comment = forms.CharField(max_length=300, widget=forms.Textarea(), help_text = 'You can leave your written comment here!',required=False)
  24. def clean(self):
  25. cleaned_data = super(VoteForm, self).clean()
  26. aestethic =cleaned_data.get('aestethic')
  27. innovation = cleaned_data.get('innovation')
  28. technical = cleaned_data.get('technical')
  29. integration = cleaned_data.get('integration')
  30. comment = cleaned_data.get('comment')
  31. #initial can be specified with old value in db maybe
  32. class searchAgentForm(forms.ModelForm):
  33. class Meta:
  34. model = SearchAgent
  35. fields = '__all__'
  36. # fields = ('first_name','last_name','adress','postcode','city','country', 'email','phonenumber','alternate_phonenumber','skype_name','website', 'terms')
  37. class RegisterForm(forms.ModelForm):
  38. terms = forms.BooleanField(required=True, label= ('I accept and have read the <a href="https://www.mediaarchitecture.org/privacy-policy/">Privacy Policy.</a>'))
  39. class Meta:
  40. model = Contact
  41. fields = ('first_name','last_name','adress','postcode','city','country',
  42. 'email','phonenumber','alternate_phonenumber','skype_name','website', 'terms')
  43. class SignUpForm(UserCreationForm):
  44. captcha = CaptchaField( generator='captcha.helpers.math_challenge' )
  45. class Meta:
  46. model = User
  47. fields = ('username', 'password1', 'password2')
  48. def extend_help_text( help_text, myList ):
  49. extended_text = help_text
  50. extended_text += " z.B. "
  51. for x in myList:
  52. extended_text += x[1] + ", "
  53. extended_text = extended_text[:-2]
  54. extended_text += "."
  55. return extended_text
  56. class SubmissionForm(forms.ModelForm):
  57. terms = forms.BooleanField(required=True, label= ('I accept and have read the Terms of Participation.'))
  58. class Meta:
  59. model = Wohnprojekt
  60. fields = (
  61. # 'title','country','city','year','owner','teaser_txt','header','category', 'description_txt',
  62. 'terms',
  63. 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei', 'mitmachen','rechtsform','ort','orga',
  64. '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',
  65. )
  66. def __init__(self,*args, **kwargs):
  67. super(SubmissionForm, self).__init__(*args, **kwargs)
  68. #
  69. #
  70. self.fields['orga'].widget = ListTextWidget(data_list=Product.ORGANIZATION, name='orga_list')
  71. self.fields['rechtsform'].widget = ListTextWidget(data_list=Product.RECHTSFORM, name='rechtsform_list')
  72. self.fields['artmodell'].widget = ListTextWidget(data_list=Wohnprojekt.ARTMODELL, name='artmodell_list')
  73. self.fields['bautraeger'].widget = ListTextWidget(data_list=Wohnprojekt.BAUTRAEGER, name='bautraeger_list')
  74. self.fields['bauweise'].widget = ListTextWidget(data_list=Wohnprojekt.BAUWEISE, name='bauweise_list')
  75. self.fields['zielgruppen'].widget = ListTextWidget(data_list=Wohnprojekt.ZIELGRUPPEN, name='zielgruppen_list')
  76. self.fields['gprojekte'].widget = ListTextWidget(data_list=Wohnprojekt.GPROJEKTE, name='gprojekte_list')
  77. #
  78. #
  79. self.fields['orga'].help_text = extend_help_text (self.fields['orga'].help_text, Product.ORGANIZATION)
  80. self.fields['rechtsform'].help_text = extend_help_text (self.fields['rechtsform'].help_text, Product.RECHTSFORM)
  81. self.fields['bauweise'].help_text = extend_help_text (self.fields['bauweise'].help_text, Wohnprojekt.BAUWEISE)
  82. self.fields['zielgruppen'].help_text = extend_help_text (self.fields['zielgruppen'].help_text, Wohnprojekt.ZIELGRUPPEN)
  83. self.fields['gprojekte'].help_text = extend_help_text (self.fields['gprojekte'].help_text, Wohnprojekt.GPROJEKTE)
  84. #
  85. #
  86. self.helper = FormHelper()
  87. self.helper.form_tag = False
  88. self.helper.layout = Layout(
  89. Fieldset(
  90. ('Über dein Projekt'),
  91. 'name','claim','beschreibung','learning','status',
  92. Div(
  93. Div('adresse', css_class='col-sm-6 col-6'),
  94. Div('ort', css_class='col-sm-6 col-6'),
  95. css_class='form-row row'),
  96. Div(
  97. Div('frei', css_class='col-sm-6 col-6'),
  98. Div('kfrei', css_class='col-sm-6 col-6'),
  99. css_class='form-row row'),
  100. 'mitmachen','rechtsform','orga',
  101. Div(
  102. Div('website', css_class='col-sm-6 col-6'),
  103. Div('email', css_class='col-sm-6 col-6'),
  104. css_class='form-row row'),
  105. Div(
  106. Div('gruendungsjahr', css_class='col-sm-6 col-6'),
  107. Div('betriebgenommen', css_class='col-sm-6 col-6'),
  108. css_class='form-row row'),
  109. 'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger',
  110. Div(
  111. Div('aerwachsene', css_class='col-sm-6 col-6'),
  112. Div('akinder', css_class='col-sm-6 col-6'),
  113. css_class='form-row row'),
  114. 'awohnungen',
  115. Div(
  116. Div('wohnflaeche', css_class='col-sm-3 col-3'),
  117. Div('gewerbeflaechen', css_class='col-sm-3 col-3'),
  118. Div('gemeinschaftsflaeche', css_class='col-sm-3 col-3'),
  119. Div('sonstige_flaechen', css_class='col-sm-3 col-3'),
  120. css_class='form-row row'),
  121. 'kflaechen',
  122. Div(
  123. Div('gemeinschaftr', css_class='col-sm-6 col-6'),
  124. Div('raumangebot', css_class='col-sm-6 col-6'),
  125. Div('kgemeinschaftr', css_class='col-sm-6 col-6'),
  126. Div('kraumangebot', css_class='col-sm-6 col-6'),
  127. css_class='form-row row'),
  128. 'sonderwohnformen', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
  129. )
  130. )
  131. class CreditForm(forms.ModelForm):
  132. class Meta:
  133. model = Credit
  134. fields = ('owner','architecture','concept','structural_engeneering','facade_design',
  135. 'face_construction','kinetic_design','light_design','tecnical_layout',
  136. 'display_content','light_hardware','lightning_software','product_coordination',
  137. 'membrane_skin','interaction_design','sponsor','module_elems')
  138. def __init__(self, *args, **kwargs):
  139. super(CreditForm, self).__init__(*args, **kwargs)
  140. self.fields['owner'].help_text = ('<i>e.g. Cardinal Group</i>')
  141. self.fields['architecture'].help_text = ('<i>e.g. Domenico Torrone and Partners</i>')
  142. self.fields['concept'].help_text = ('<i>e.g. Domenico Torrone and Partners</i>')
  143. self.fields['structural_engeneering'].help_text = ('<i>e.g. Osap Inc., Hongkong</i>')
  144. self.fields['facade_design'].help_text = ('<i>e.g. Mega Facades Inc, Beijing</i>')
  145. self.fields['face_construction'].help_text = ('<i>e.g. None</i>')
  146. self.fields['kinetic_design'].help_text = ('<i>e.g. Domenico Torrone and Osap, Hongkong</i>')
  147. self.fields['light_design'].help_text = ('<i>e.g. Domenico Torrone and Osap, Hongkong</i>')
  148. self.fields['tecnical_layout'].help_text = ('<i>e.g. Modul Labs, Berlin</i>')
  149. self.fields['display_content'].help_text = ('<i>e.g. Domenico Torrone;reality check, Munich;</i>')
  150. self.fields['light_hardware'].help_text = ('<i>e.g. Modul Labs, Berlin</i>')
  151. self.fields['lightning_software'].help_text = ('<i>e.g. Dimma DMX by Eflux</i>')
  152. self.fields['product_coordination'].help_text = ('<i>e.g. Domenico Torrone and Partners</i>')
  153. self.fields['membrane_skin'].help_text = ('<i>e.g. none</i>')
  154. self.fields['interaction_design'].help_text = ('<i>e.g. pixeldings, Toronto</i>')
  155. self.fields['sponsor'].help_text = ('<i>e.g. none</i>')
  156. self.fields['module_elems'].help_text = ('<i>e.g. Maxi PIX 12 by Eflux</i>')
  157. self.fields['owner'].max_length = 100
  158. self.fields['architecture'].max_length = 100
  159. self.fields['concept'].max_length = 100
  160. self.fields['structural_engeneering'].max_length = 100
  161. self.fields['facade_design'].max_length = 100
  162. self.fields['face_construction'].max_length = 100
  163. self.fields['kinetic_design'].max_length = 100
  164. self.fields['light_design'].max_length = 100
  165. self.fields['tecnical_layout'].max_length = 100
  166. self.fields['display_content'].max_length = 100
  167. self.fields['light_hardware'].max_length = 100
  168. self.fields['lightning_software'].max_length = 100
  169. self.fields['product_coordination'].max_length = 100
  170. self.fields['membrane_skin'].max_length = 100
  171. self.fields['interaction_design'].max_length = 100
  172. self.fields['sponsor'].max_length = 100
  173. self.fields['module_elems'].max_length = 100
  174. self.helper = FormHelper()
  175. self.helper.field_class = 'form_border'
  176. self.helper.form_tag = False
  177. self.helper.layout = Layout(
  178. Fieldset(
  179. ('Credits'),
  180. Div( Div('owner',css_class='form-group col-md-5 mb-0'), Div('architecture',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  181. Div( Div('concept',css_class='form-group col-md-5 mb-0'), Div('structural_engeneering',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  182. Div( Div('facade_design',css_class='form-group col-md-5 mb-0'), Div('face_construction',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  183. Div( Div('kinetic_design',css_class='form-group col-md-5 mb-0'), Div('light_design',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  184. Div( Div('tecnical_layout',css_class='form-group col-md-5 mb-0'), Div('display_content',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  185. Div( Div('light_hardware',css_class='form-group col-md-5 mb-0'), Div('lightning_software',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  186. Div( Div('product_coordination',css_class='form-group col-md-5 mb-0'), Div('membrane_skin',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  187. Div( Div('interaction_design',css_class='form-group col-md-5 mb-0'), Div('sponsor',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
  188. Div( Div( 'module_elems',css_class='form-group col-md-5 mb-0'), css_class='form-row')
  189. ))
  190. class DescriptionForm(forms.ModelForm):
  191. class Meta:
  192. model = Description
  193. fields =('facade','light_creation','resolution','pixel_distance','luminance','urban_situation','description_showreel')
  194. def __init__(self, *args, **kwargs):
  195. super(DescriptionForm, self).__init__(*args, **kwargs)
  196. self.helper = FormHelper()
  197. self.helper.form_tag = False
  198. self.helper.layout = Layout(
  199. Fieldset(
  200. ('Concept Descriptions'),
  201. Div(Div('des_concept', css_class='form-group col-md-12 mb-0'), css_class='form-row'),
  202. Div(Div('des_scenario', css_class='form-group col-md-6 mb-0'),
  203. Div('des_approach', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  204. Div(Div('des_tech', css_class='form-group col-md-6 mb-0'),
  205. Div('des_visual', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  206. ))
  207. class InteractionForm(forms.ModelForm):
  208. class Meta:
  209. model = Interaction
  210. fields = ('communtity','host','legal_form','issues','impact','tools','tools_used','next_steps')
  211. def __init__(self, *args, **kwargs):
  212. super(InteractionForm, self).__init__(*args, **kwargs)
  213. self.helper = FormHelper()
  214. self.helper.form_tag = False
  215. self.helper.layout = Layout(
  216. Fieldset(
  217. ('Community Ascpects - not mandatory'),
  218. Div(Div('communtity', css_class='form-group col-md-6 mb-0'),
  219. Div('issues', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  220. Div(Div('legal_form', css_class='form-group col-md-6 mb-0'),
  221. Div('host', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  222. Div(Div('impact', css_class='form-group col-md-6 mb-0'),
  223. Div('tools', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  224. Div(Div('tools_used', css_class='form-group col-md-6 mb-0'),
  225. Div('next_steps', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
  226. ))
  227. class LinkForm(forms.ModelForm):
  228. class Meta:
  229. model = Link
  230. fields = ('link_description','link')
  231. #def __init__(self, *args, **kwargs):
  232. # super(LinkForm, self).__init__(*args, **kwargs)
  233. # self.helper = FormHelper()
  234. # self.helper.field_class = 'form_border'
  235. # self.helper.form_tag = False
  236. # self.helper.layout = Layout(
  237. # Fieldset(
  238. # Div(Div('link_description', css_class='form-group col-md-5 mb-0'),
  239. # Div('link', css_class='form-group col-md-5 mb-0'),
  240. # css_class='form-row')
  241. # ))
  242. LinkFormSet = inlineformset_factory(Product,Link, fields = ['link_description','link'], form=LinkForm, extra=3, can_delete=False)
  243. class FormsetHelper(FormHelper):
  244. def __init__(self,*args, **kwargs):
  245. super(FormsetHelper, self).__init__(*args, **kwargs)
  246. #self.form_method = 'post'
  247. self.form_tag = False
  248. #self.render_hidden_fields = True
  249. #self.render_required_fields = True
  250. self.layout = Layout(
  251. Fieldset(
  252. (''),
  253. Div(
  254. Div('link_description', css_class='form-group col-md-4 mb-0'),
  255. Div('link', css_class='form-group col-md-6 mb-0')
  256. , css_class='form-row')
  257. ))
  258. class MediaForm(FileFormMixin, forms.Form):
  259. image = UploadedFileField()
  260. name_for = CharField()
  261. copyright = CharField()
  262. #prefix = 'upload'
  263. def __init__(self, *args, **kwargs):
  264. super(MediaForm, self).__init__(*args, **kwargs)
  265. self.helper = FormHelper()
  266. self.helper.form_tag = False
  267. self.fields['name_for'].label = 'Caption'
  268. self.fields['copyright'].label = 'Copyright of'
  269. self.fields['image'].label = 'Image or Video'
  270. self.fields['image'].help_text = 'Please upload Images in PNG or JPEG format. Upload Video in MP4 format.'
  271. self.layout = Layout(
  272. Fieldset(
  273. (''),
  274. Div(
  275. Div('name_for', css_class='form-group col-md-6 mb-0'),
  276. Div('copyright', css_class='form-group col-md-4 mb-0')
  277. , css_class='form-row'),
  278. Div(
  279. Div('image', css_class='form-group col-md-6 mb-0'),
  280. css_class='form-row'),
  281. ))
  282. #def is_valid(self):
  283. # super(MediaForm,self).is_valid()
  284. # return True
  285. #def clean(self):
  286. # cleaned_data = super(MediaForm,self).clean()
  287. # #test for valid formats
  288. # #if cleaned_data['image']
  289. # # raise ValidationError('Title field is required')
  290. # return cleaned_data
  291. #def save(self, Product_pk):
  292. # self.clean()
  293. # media = Media()
  294. # print('hallo')
  295. # media.Product= Product_pk
  296. # media.image=self.cleaned_data['image']
  297. # media.name_for=self.cleaned_data['name_for']
  298. # media.copyright =self.cleaned_data['copyright']
  299. # media.Product= Product_pk
  300. # media.save()
  301. ## self.delete_temporary_files()
  302. class MediaForm_test(FileFormMixin, forms.Form):
  303. image = UploadedFileField()
  304. name_for = CharField()
  305. copyright = CharField()
  306. def __init__(self, *args, **kwargs):
  307. super(MediaForm_test, self).__init__(*args, **kwargs)
  308. self.helper = FormHelper()
  309. self.helper.form_tag = False
  310. class MediaForm1(FileFormMixin, forms.Form):
  311. image = MultipleUploadedFileField()
  312. name_for = CharField()
  313. copyright = CharField()
  314. def __init__(self, *args, **kwargs):
  315. super(MediaForm1, self).__init__(*args, **kwargs)
  316. self.helper = FormHelper()
  317. self.helper.form_tag = False
  318. class MediaForm2(FileFormMixin,forms.Form):
  319. image = UploadedFileField()
  320. name_for = CharField()
  321. copyright = CharField()
  322. def __init__(self, *args, **kwargs):
  323. super(MediaForm2, self).__init__(*args, **kwargs)
  324. self.helper = FormHelper()
  325. self.helper.form_tag = False
  326. MediaFormSet = formset_factory(MediaForm_test, extra=3)
  327. class MediaFormsetHelper(FormHelper):
  328. def __init__(self,*args, **kwargs):
  329. super(MediaFormsetHelper, self).__init__(*args, **kwargs)
  330. self.form_tag = False
  331. self.layout = Layout(
  332. Fieldset(
  333. (''),
  334. Div(
  335. Div('name_for', css_class='form-group col-md-6 mb-0'),
  336. Div('copyright', css_class='form-group col-md-4 mb-0')
  337. , css_class='form-row'),
  338. Div(
  339. Div('image', css_class='form-group col-md-6 mb-0'),
  340. css_class='form-row'),
  341. ))
  342. class VideoForm(forms.ModelForm):
  343. class Meta:
  344. model = Video
  345. fields = ('name_for','copyright','image')