Juan Carlos 5 жил өмнө
parent
commit
c32115b53c

+ 39 - 17
marktplatz/forms.py

@@ -70,7 +70,7 @@ class SubmissionForm(forms.ModelForm):
         model = Wohnprojekt
         fields = ('title','country','city','year','owner','teaser_txt','header','category', 'description_txt', 'terms',
         'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','frei','mitmachen','rechtsform','ort','orga',
-         'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'artmodell', 'bautraeger', 'aerwachsene', 'akinder', 'awohnungen', 'akinder', 'wohnflaeche', 'gewerbeflaechen', 'gemeinschaftsflaeche', 'sonstige_flaechen', 'gemeinschaftr', 'sonderwohnformen', 'raumangebot', 'parbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
+         'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'artmodell', 'bautraeger', 'aerwachsene', 'akinder', 'awohnungen', 'wohnflaeche', 'gewerbeflaechen', 'gemeinschaftsflaeche', 'sonstige_flaechen', 'gemeinschaftr', 'sonderwohnformen', 'raumangebot', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
          )
 
 
@@ -84,11 +84,16 @@ class SubmissionForm(forms.ModelForm):
        self.fields['orga'].widget       = ListTextWidget(data_list=Product.ORGANIZATION,  name='orga_list')
        self.fields['rechtsform'].widget = ListTextWidget(data_list=Product.RECHTSFORM,  name='rechtsform_list')
        self.fields['artmodell'].widget = ListTextWidget(data_list=Wohnprojekt.ARTMODELL,  name='artmodell_list')
-       self.fields['artmodell'].widget = ListTextWidget(data_list=Wohnprojekt.ARTMODELL,  name='artmodell_list')
+       self.fields['bautraeger'].widget = ListTextWidget(data_list=Wohnprojekt.BAUTRAEGER,  name='bautraeger_list')
+       self.fields['bauweise'].widget = ListTextWidget(data_list=Wohnprojekt.BAUWEISE,  name='bauweise_list')
+       self.fields['zielgruppen'].widget = ListTextWidget(data_list=Wohnprojekt.ZIELGRUPPEN,  name='zielgruppen_list')
+
        #
        #
        self.fields['orga'].help_text = extend_help_text (self.fields['orga'].help_text, Product.ORGANIZATION)
        self.fields['rechtsform'].help_text = extend_help_text (self.fields['rechtsform'].help_text, Product.RECHTSFORM)
+       self.fields['bauweise'].help_text = extend_help_text (self.fields['bauweise'].help_text, Wohnprojekt.BAUWEISE)
+       self.fields['zielgruppen'].help_text = extend_help_text (self.fields['zielgruppen'].help_text, Wohnprojekt.ZIELGRUPPEN)
        #
        #
        #
@@ -112,23 +117,40 @@ class SubmissionForm(forms.ModelForm):
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Fieldset(
-               ('About your Product'),
-
-               Div(
-                   Div('country', css_class='form-group col-md-6 mb-0'),
-                   Div('city', css_class='form-group col-md-3 mb-0'),
-                   Div('year', css_class='form-group col-md-3 mb-0'),
-                   css_class='form-row'),
-               'category',
-               'teaser_txt',
-               'description_txt',
-               'name','claim','beschreibung','learning','status','adresse','website','frei','mitmachen','rechtsform','ort','orga',
+               ('Über dein Projekt'),
+
+               # Div(
+               #     Div('country', css_class='form-group col-md-6 mb-0'),
+               #     Div('city', css_class='form-group col-md-3 mb-0'),
+               #     Div('year', css_class='form-group col-md-3 mb-0'),
+               #     css_class='form-row row'),
+               # 'category',
+               # 'teaser_txt',
+               # 'description_txt',
+
+
+               'name','claim','beschreibung','learning','status','adresse','ort','website','frei','mitmachen','rechtsform','orga',
               Div(
-                  Div('gruendungsjahr',  css_class='form-group col-xs-6 mb-0'),
-                  Div('betriebgenommen', css_class='form-group col-xs-6 mb-0'),
-                  css_class='form-row'),
+                  Div('gruendungsjahr',  css_class='col-sm-6 col-6'),
+                  Div('betriebgenommen', css_class='col-sm-6 col-6'),
+                  css_class='form-row  row'),
 
-             'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'artmodell', 'bautraeger', 'aerwachsene', 'akinder', 'awohnungen', 'akinder', 'wohnflaeche', 'gewerbeflaechen', 'gemeinschaftsflaeche', 'sonstige_flaechen', 'gemeinschaftr', 'sonderwohnformen', 'raumangebot', 'parbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
+             'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'artmodell', 'bautraeger',
+
+              Div(
+                  Div('aerwachsene',  css_class='col-sm-6 col-6'),
+                  Div('akinder', css_class='col-sm-6 col-6'),
+                  css_class='form-row  row'),
+
+             'awohnungen',
+
+              Div(
+                  Div('wohnflaeche',  css_class='col-sm-3 col-3'),
+                  Div('gewerbeflaechen', css_class='col-sm-3 col-3'),
+                  Div('gemeinschaftsflaeche', css_class='col-sm-3 col-3'),
+                  Div('sonstige_flaechen', css_class='col-sm-3 col-3'),
+                  css_class='form-row  row'),
+             'gemeinschaftr', 'raumangebot', 'sonderwohnformen', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
 
            )
        )

+ 141 - 137
marktplatz/models.py

@@ -1,47 +1,50 @@
-from django.db import models
+import os
+import uuid
+import datetime
+import shutil
+
+
+from django.db.models import *
 from django.core.validators import MinValueValidator, MaxValueValidator
 from django.contrib.auth.models import User
-from imagekit.models import ImageSpecField
-from imagekit.processors import ResizeToFill
-from imagekit.processors import ResizeToCover
-from imagekit.processors import Thumbnail
-from imagekit.processors import ResizeToCover
-from imagekit.models import ProcessedImageField
 from django.core.files.storage import FileSystemStorage
 from django_countries.fields import CountryField
-import os
-import uuid
 
 from django.db import models
 from django.dispatch import receiver
 from django.db.models.signals import post_delete, post_save
+from django.conf import settings
 
+from multiselectfield import MultiSelectField
 
+from imagekit.models import ImageSpecField
+from imagekit.processors import ResizeToFill
+from imagekit.processors import ResizeToCover
+from imagekit.processors import Thumbnail
+from imagekit.processors import ResizeToCover
+from imagekit.models import ProcessedImageField
 
-from django.conf import settings
-import datetime
-import shutil
 
 from marktplatz.widgets import *
 
 class Credit(models.Model):
-    owner = models.CharField(verbose_name='Building or Product owner',blank=True,max_length = 300)
-    architecture = models.CharField(verbose_name='Architecture',blank=True,max_length = 300)
-    concept = models.CharField(verbose_name='Product artist/ concept/ design/ planning',blank=True,max_length = 300)
-    structural_engeneering = models.CharField(verbose_name='Structural engineering',blank=True,max_length = 300)
-    facade_design = models.CharField(verbose_name='Facade design',blank=True,max_length = 300)
-    face_construction = models.CharField(verbose_name='Facade construction',blank=True,max_length = 300)
-    kinetic_design = models.CharField(verbose_name='Kinetic engineering',blank = True,max_length = 300)
-    light_design = models.CharField(verbose_name='Light design',blank = True,max_length = 300)
-    tecnical_layout = models.CharField(verbose_name='Technical layout light',blank = True,max_length = 300)
-    display_content = models.CharField(verbose_name='Display content/ visuals/ showreel',blank = True,max_length = 300)
-    light_hardware = models.CharField(verbose_name='Light hardware (LED hardware)',blank = True,max_length = 300)
-    lightning_software = models.CharField(verbose_name='Lighting control software',blank = True,max_length = 300)
-    Product_coordination = models.CharField(verbose_name='Product co-ordination',blank = True,max_length = 300)
-    membrane_skin = models.CharField(verbose_name='Membrane skin',blank = True,max_length = 300)
-    interaction_design = models.CharField(verbose_name='Interaction design/ programming',blank = True,max_length = 300)
-    sponsor = models.CharField(verbose_name='Product sponsor/ support',blank = True,max_length = 500)
-    module_elems = models.CharField(verbose_name='Pixel or other basic module/ elements',blank = True,max_length = 300)
+    owner = CharField(verbose_name='Building or Product owner',blank=True,max_length = 300)
+    architecture = CharField(verbose_name='Architecture',blank=True,max_length = 300)
+    concept = CharField(verbose_name='Product artist/ concept/ design/ planning',blank=True,max_length = 300)
+    structural_engeneering = CharField(verbose_name='Structural engineering',blank=True,max_length = 300)
+    facade_design = CharField(verbose_name='Facade design',blank=True,max_length = 300)
+    face_construction = CharField(verbose_name='Facade construction',blank=True,max_length = 300)
+    kinetic_design = CharField(verbose_name='Kinetic engineering',blank = True,max_length = 300)
+    light_design = CharField(verbose_name='Light design',blank = True,max_length = 300)
+    tecnical_layout = CharField(verbose_name='Technical layout light',blank = True,max_length = 300)
+    display_content = CharField(verbose_name='Display content/ visuals/ showreel',blank = True,max_length = 300)
+    light_hardware = CharField(verbose_name='Light hardware (LED hardware)',blank = True,max_length = 300)
+    lightning_software = CharField(verbose_name='Lighting control software',blank = True,max_length = 300)
+    Product_coordination = CharField(verbose_name='Product co-ordination',blank = True,max_length = 300)
+    membrane_skin = CharField(verbose_name='Membrane skin',blank = True,max_length = 300)
+    interaction_design = CharField(verbose_name='Interaction design/ programming',blank = True,max_length = 300)
+    sponsor = CharField(verbose_name='Product sponsor/ support',blank = True,max_length = 500)
+    module_elems = CharField(verbose_name='Pixel or other basic module/ elements',blank = True,max_length = 300)
 
     def __iter__(self):
         for field in self._meta.fields:
@@ -51,13 +54,13 @@ class Credit(models.Model):
 
 
 class Description(models.Model):
-    facade = models.TextField(verbose_name='Facade type and geometry (structure)',blank = True,max_length = 900)
-    light_creation = models.TextField(verbose_name='Kind of light creation',blank = True,max_length = 900)
-    resolution = models.TextField(verbose_name='Resolution and transmitting behaviour',blank = True,max_length = 900)
-    pixel_distance = models.CharField(verbose_name='Pixel distance',blank = True,max_length = 300)
-    luminance = models.TextField(verbose_name='Luminace',blank = True,max_length = 900)
-    urban_situation = models.TextField(verbose_name='Urban situation',blank = True,max_length = 900)
-    description_showreel = models.TextField(verbose_name='Description of showreel',blank = True,max_length = 900)
+    facade = TextField(verbose_name='Facade type and geometry (structure)',blank = True,max_length = 900)
+    light_creation = TextField(verbose_name='Kind of light creation',blank = True,max_length = 900)
+    resolution = TextField(verbose_name='Resolution and transmitting behaviour',blank = True,max_length = 900)
+    pixel_distance = CharField(verbose_name='Pixel distance',blank = True,max_length = 300)
+    luminance = TextField(verbose_name='Luminace',blank = True,max_length = 900)
+    urban_situation = TextField(verbose_name='Urban situation',blank = True,max_length = 900)
+    description_showreel = TextField(verbose_name='Description of showreel',blank = True,max_length = 900)
 
     def __iter__(self):
         for field in self._meta.fields:
@@ -66,14 +69,14 @@ class Description(models.Model):
 
 
 class Interaction(models.Model):
-    communtity = models.TextField(verbose_name='Community or communities involved',blank = True,max_length = 900)
-    host = models.CharField(verbose_name='Host organization',blank = True,max_length = 900)
-    legal_form = models.CharField(verbose_name='Legal form',blank=True,max_length = 900)
-    issues = models.TextField(verbose_name='Issues addressed',blank = True,max_length = 900)
-    impact = models.TextField(verbose_name='Impact',blank = True,max_length = 900)
-    tools = models.TextField(verbose_name='Tools developed',blank = True,max_length = 900)
-    tools_used = models.TextField(verbose_name='Tools used',blank = True,max_length = 900)
-    next_steps = models.TextField(verbose_name='Next steps',blank = True,max_length = 900)
+    communtity = TextField(verbose_name='Community or communities involved',blank = True,max_length = 900)
+    host = CharField(verbose_name='Host organization',blank = True,max_length = 900)
+    legal_form = CharField(verbose_name='Legal form',blank=True,max_length = 900)
+    issues = TextField(verbose_name='Issues addressed',blank = True,max_length = 900)
+    impact = TextField(verbose_name='Impact',blank = True,max_length = 900)
+    tools = TextField(verbose_name='Tools developed',blank = True,max_length = 900)
+    tools_used = TextField(verbose_name='Tools used',blank = True,max_length = 900)
+    next_steps = TextField(verbose_name='Next steps',blank = True,max_length = 900)
 
     def __iter__(self):
         for field in self._meta.fields:
@@ -84,18 +87,18 @@ class Interaction(models.Model):
 
 
 class Contact(models.Model):
-    user = models.OneToOneField(User, on_delete=models.CASCADE,blank=True)
-    first_name = models.CharField(verbose_name="Vorname", max_length = 100)
-    last_name = models.CharField(verbose_name="Nachname", max_length = 100)
-    adress = models.CharField(verbose_name="Adresse", blank=True,max_length = 100)
-    postcode = models.CharField(verbose_name="Postleitzahl", blank=True, max_length = 100)
-    city = models.CharField(verbose_name="Stadt", blank=True,max_length = 100)
-    country = models.CharField(verbose_name="Land", blank=True,max_length = 100)
-    email = models.EmailField(verbose_name="E-Mail-Addresse", unique=True)
-    phonenumber = models.CharField(verbose_name="1. Telefonnummer", blank=True,max_length = 100)
-    alternate_phonenumber = models.CharField(verbose_name="2. Telefonnummer", blank = True,max_length = 100)
-    skype_name = models.CharField(verbose_name="Skype", blank=True,max_length = 300)
-    website = models.URLField(verbose_name="Website", blank=True)
+    user = OneToOneField(User, on_delete=models.CASCADE,blank=True)
+    first_name = CharField(verbose_name="Vorname", max_length = 100)
+    last_name = CharField(verbose_name="Nachname", max_length = 100)
+    adress = CharField(verbose_name="Adresse", blank=True,max_length = 100)
+    postcode = CharField(verbose_name="Postleitzahl", blank=True, max_length = 100)
+    city = CharField(verbose_name="Stadt", blank=True,max_length = 100)
+    country = CharField(verbose_name="Land", blank=True,max_length = 100)
+    email = EmailField(verbose_name="E-Mail-Addresse", unique=True)
+    phonenumber = CharField(verbose_name="1. Telefonnummer", blank=True,max_length = 100)
+    alternate_phonenumber = CharField(verbose_name="2. Telefonnummer", blank = True,max_length = 100)
+    skype_name = CharField(verbose_name="Skype", blank=True,max_length = 300)
+    website = URLField(verbose_name="Website", blank=True)
 
     def __str__(self):
         return self.first_name + ' ' + self.last_name
@@ -107,8 +110,8 @@ class Contact(models.Model):
 
 
 class Category(models.Model):
-    name = models.CharField(max_length=100)
-    short_name = models.CharField(max_length=10)
+    name = CharField(max_length=100)
+    short_name = CharField(max_length=10)
 
     def __str__(self):
         return self.name
@@ -136,7 +139,7 @@ class Product(models.Model):
         ('Verein', 'Verein'),
         ('Genossenschaft', 'Genossenschaft'),
         ('GbR', 'GbR'),
-        ('Andere', 'Andere'),
+        ('Sonstiges', 'Sonstiges'),
     ]
 
     ORT = [
@@ -183,45 +186,45 @@ class Product(models.Model):
         ('Sonstiges', 'Sonstiges'),
     ]
 
-    name         = models.CharField( 'Name', max_length = 128, help_text="Name des Projekts", null = True, blank=True )
-    claim        = models.CharField( 'Claim / Untertitel', max_length = 256, help_text="Claim / Untertitel", null = True, blank=True )
-    beschreibung = models.CharField( 'Beschreibung', max_length = 256, help_text="Beschreibung des Projektes", null = True, blank=True )
-    learning     = models.CharField( 'Learning', max_length = 256, help_text="Learning", null = True, blank=True )
-    gruendungsjahr  = models.IntegerField('Gründungsjahr', help_text="Gründungsjahr des Projekts", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
-    betriebgenommen = models.IntegerField('in Betrieb genommen in Jahr', help_text="Wann wurde das Projekt in Betrieb genommen?", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
-    status   = models.CharField( 'Status',    max_length = 3,    choices=STATUS, default='ENT', help_text="Was ist der Status des Projektes" , null = True, blank=True )
-    adresse  = models.CharField( 'Adresse',   max_length = 256,  help_text="Adresse des Projektes", null = True, blank=True )
-    plz             = models.CharField   ( 'Adresse',   max_length = 256,  help_text="PLZ des Projektes", null = True, blank=True )
-    adresse_zusatz  = models.CharField   ( 'Adresse Zusatz',   max_length = 256,  help_text="Adresse Zusatz", null = True, blank=True )
-    ort             = models.CharField   ( 'Ort',        max_length = 4, choices=ORT, default='WELT', help_text="Ort des Projektes", null = True, blank=True )
-    website  = models.URLField ( 'Website',   max_length = 2048, help_text="Website des des Projektes", null = True, blank=True )
-    frei     = models.CharField( 'Platz frei', max_length = 4,    choices=FREI, default='NEIN', help_text="Gibt es freie Plätze?", null = True, blank=True )
-    rechtsform      = models.CharField   ( 'Rechtsform', max_length = 32, help_text="Rechtsform des Projektes", null = True, blank=True )
-    orga            = models.CharField   ( 'Organisationsform',  max_length = 64, help_text="Organisationsform des Projektes.", null = True, blank=True )
-    mitmachen  = models.BooleanField( 'Mitmachen möglich', default=False, help_text="Kann jemand mitmachen?", null = True, blank=True )
-
-    title = models.CharField('Product Title',max_length = 100)
+    name         = CharField( 'Name', max_length = 128, help_text="Name des Projekts", null = True, blank=True )
+    claim        = CharField( 'Claim / Untertitel', max_length = 256, help_text="Claim / Untertitel", null = True, blank=True )
+    beschreibung = CharField( 'Beschreibung', max_length = 256, help_text="Beschreibung des Projektes", null = True, blank=True )
+    learning     = CharField( 'Learning', max_length = 256, help_text="Learning", null = True, blank=True )
+    gruendungsjahr  = IntegerField('Gründungsjahr', help_text="Gründungsjahr des Projekts", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
+    betriebgenommen = IntegerField('in Betrieb genommen in Jahr', help_text="Wann wurde das Projekt in Betrieb genommen?", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
+    status   = CharField( 'Status',    max_length = 3,    choices=STATUS, default='ENT', help_text="Was ist der Status des Projektes" , null = True, blank=True )
+    adresse  = CharField( 'Adresse',   max_length = 256,  help_text="Adresse des Projektes", null = True, blank=True )
+    plz             = CharField   ( 'Adresse',   max_length = 256,  help_text="PLZ des Projektes", null = True, blank=True )
+    adresse_zusatz  = CharField   ( 'Adresse Zusatz',   max_length = 256,  help_text="Adresse Zusatz", null = True, blank=True )
+    ort             = CharField   ( 'Ort',        max_length = 4, choices=ORT, default='WELT', help_text="Ort des Projektes", null = True, blank=True )
+    website  = URLField ( 'Website',   max_length = 2048, help_text="Website des des Projektes", null = True, blank=True )
+    frei     = CharField( 'Platz frei', max_length = 4,    choices=FREI, default='NEIN', help_text="Gibt es freie Plätze?", null = True, blank=False )
+    rechtsform      = CharField   ( 'Rechtsform', max_length = 32, help_text="Rechtsform des Projektes", null = True, blank=True )
+    orga            = CharField   ( 'Organisationsform',  max_length = 64, help_text="Organisationsform des Projektes.", null = True, blank=True )
+    mitmachen  = BooleanField( 'Mitmachen möglich', default=False, help_text="Kann jemand mitmachen?", null = True, blank=False )
+
+    title = CharField('Product Title',max_length = 100)
     country = CountryField(blank=True,multiple=True, help_text="")
-    city = models.CharField(max_length = 100,null = True, blank=True, help_text="")
-    year = models.IntegerField('Year of Completion',null = True, blank=True, help_text="")
-    owner = models.CharField(max_length = 300,null = True,blank=True, help_text="")
-    teaser_txt = models.TextField(blank = True, max_length = 1050, help_text="")
-    header = models.CharField(max_length = 900,null = True, help_text="")
-    description_txt = models.TextField(max_length = 3000,null = True, help_text="")
-    cid = models.IntegerField(null = True,blank=True, help_text="")
-    class_cid = models.CharField(null = True,max_length = 3, blank=True, help_text="")
-    sumbitted = models.CharField(null = True,max_length = 10, blank=True, help_text="")
-    date_submitted = models.DateField(auto_now_add=True, help_text="")
-    terms = models.NullBooleanField(help_text="")
-    edit = models.NullBooleanField(help_text="")
-    public = models.NullBooleanField(help_text="")
-    photo = models.CharField(max_length=500, null=True, blank=True, help_text="")
-    videocts = models.CharField(max_length=500, null=True, blank=True, help_text="")
-    category = models.ManyToManyField(Category, null=True, help_text="")
-    credits = models.ForeignKey(Credit, null = True,on_delete=models.SET_NULL, help_text="")
-    description = models.ForeignKey(Description,null = True, on_delete=models.SET_NULL, help_text="")
-    contact = models.ForeignKey(Contact, null = True,on_delete=models.SET_NULL, help_text="")
-    interaction = models.ForeignKey(Interaction, null = True,on_delete = models.SET_NULL, help_text="")
+    city = CharField(max_length = 100,null = True, blank=True, help_text="")
+    year = IntegerField('Year of Completion',null = True, blank=True, help_text="")
+    owner = CharField(max_length = 300,null = True,blank=True, help_text="")
+    teaser_txt = TextField(blank = True, max_length = 1050, help_text="")
+    header = CharField(max_length = 900,null = True, help_text="")
+    description_txt = TextField(max_length = 3000,null = True, help_text="")
+    cid = IntegerField(null = True,blank=True, help_text="")
+    class_cid = CharField(null = True,max_length = 3, blank=True, help_text="")
+    sumbitted = CharField(null = True,max_length = 10, blank=True, help_text="")
+    date_submitted = DateField(auto_now_add=True, help_text="")
+    terms = NullBooleanField(help_text="")
+    edit = NullBooleanField(help_text="")
+    public = NullBooleanField(help_text="")
+    photo = CharField(max_length=500, null=True, blank=True, help_text="")
+    videocts = CharField(max_length=500, null=True, blank=True, help_text="")
+    category = ManyToManyField(Category, null=True, help_text="")
+    credits = ForeignKey(Credit, null = True,on_delete=models.SET_NULL, help_text="")
+    description = ForeignKey(Description,null = True, on_delete=models.SET_NULL, help_text="")
+    contact = ForeignKey(Contact, null = True,on_delete=models.SET_NULL, help_text="")
+    interaction = ForeignKey(Interaction, null = True,on_delete = models.SET_NULL, help_text="")
 
     def __str__(self):
         return str(self.title)
@@ -330,35 +333,36 @@ class Wohnprojekt(Product):
         ('Kinderspielplatz', 'Kinderspielplatz'),
     ]
 
-    eigentum          = models.CharField   ( 'Rechtliche Konstruktion', max_length = 6,    choices=EIGENTUM, default='GEMIET', help_text="Rechtliche Konstruktion", null = True, blank=True )
-    inseratstext      = models.CharField   ( 'Inseratstext',   max_length = 2048,  help_text="Inseratstext", null = True, blank=True )
-    altneu            = models.CharField   ( 'Altbau/Neubau',  max_length = 4, choices=ALTNEU, help_text="Altbau/Neubau", null = True, blank=False )
-    schwerpunkt       = models.CharField    ( 'Inhaltlicher Schwerpunkt',   max_length = 2048,  help_text="Inhaltlicher Schwerpunkt", null = True, blank=True )
-    artmodell         = models.CharField    ( 'Art der Modells',    max_length = 4096,   choices=ARTMODELL, help_text="Art der Modells", null = True, blank=True )
-    bautraeger        = models.CharField    ( 'Bauträger',    max_length = 4096,   choices=BAUTRAEGER, help_text="Bauträger", null = True, blank=True )
-    aerwachsene       = models.IntegerField( 'Anzahl an Erwachsenen', help_text="Anzahl an Erwachsenen", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
-    akinder           = models.IntegerField( 'Anzahl an Kinder', help_text="Anzahl an Kinder", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
+    eigentum          = CharField   ( 'Rechtliche Konstruktion', max_length = 6,    choices=EIGENTUM, default='GEMIET', help_text="Rechtliche Konstruktion", null = True, blank=True )
+    inseratstext      = CharField   ( 'Inseratstext',   max_length = 2048,  help_text="Inseratstext", null = True, blank=True )
+    altneu            = CharField   ( 'Altbau/Neubau',  max_length = 4, choices=ALTNEU, help_text="Altbau/Neubau", null = True, blank=False )
+    schwerpunkt       = CharField    ( 'Inhaltlicher Schwerpunkt',   max_length = 2048,  help_text="Inhaltlicher Schwerpunkt", null = True, blank=True )
+    artmodell         = CharField    ( 'Art der Modells',    max_length = 4096,   choices=ARTMODELL, help_text="Art der Modells", null = True, blank=True )
+    bautraeger        = CharField    ( 'Bauträger',    max_length = 4096,   choices=BAUTRAEGER, help_text="Bauträger", null = True, blank=True )
+    aerwachsene       = IntegerField( 'Anzahl an Erwachsenen', help_text="Anzahl an Erwachsenen", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
+    akinder           = IntegerField( 'Anzahl an Kinder', help_text="Anzahl an Kinder", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
     @property
     def amitglieder(self):
             return aerwachsene + akinder
-    awohnungen        = models.IntegerField( 'Anzahl an Wohnungen', help_text="Anzahl an Wohnungen", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
-    wohnflaeche            = models.IntegerField( 'Wohnfläche', help_text="Wohnfläche", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
-    gewerbeflaechen        = models.IntegerField( 'Gewerbeflächen', help_text="Gewerbeflächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
-    gemeinschaftsflaeche   = models.IntegerField( 'Gemeinschaftsflächen', help_text="Gemeinschaftsflächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
-    sonstige_flaechen      = models.IntegerField( 'Sonstige Flächen', help_text="Sonstige Flächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
+    awohnungen        = IntegerField( 'Anzahl an Wohnungen', help_text="Anzahl an Wohnungen", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
+    wohnflaeche            = IntegerField( 'Wohnfläche', help_text="Wohnfläche", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
+    gewerbeflaechen        = IntegerField( 'Gewerbeflächen', help_text="Gewerbeflächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
+    gemeinschaftsflaeche   = IntegerField( 'Gemeinschaftsflächen', help_text="Gemeinschaftsflächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
+    sonstige_flaechen      = IntegerField( 'Sonstige Flächen', help_text="Sonstige Flächen", validators=[MinValueValidator(0)], default = 0, null = True, blank=True )
     @property
     def flaeche(self):
             return wohnflaeche + gewerbeflaechen + gemeinschaftsflaechen + sonstige_flaechen
-    gemeinschaftr         = models.CharField    ( 'Gemeinschaftsräume',    max_length = 4096,   choices=GEMEINSCHAFTR, help_text="Gemeinschaftsräume", null = True, blank=True )
-    sonderwohnformen      = models.CharField   ( 'Sonderwohnformen',   max_length = 2048,  help_text="Sonderwohnformen, z.B. Wohncluster, WGs, Sonstiges", null = True, blank=True )
-    raumangebot        = models.CharField    ( 'Raumangebot nach Außen',    max_length = 4096,   choices=RAUMANGEBOT, help_text="Raumangebot nach Außen", null = True, blank=True )
-    parbeiten          = models.IntegerField( 'Wieviele Personen arbeiten im Haus', help_text="Anzahl an Wohnungen", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
-    bauweise            = models.CharField   ( 'Bauweise',  max_length = 64, choices=BAUWEISE, help_text="Bauweise", null = True, blank=False )
-    zielgruppen          = models.CharField   ( 'Besondere Zielgruppen',  max_length = 64, choices=ZIELGRUPPEN, help_text="Besondere Zielgruppen", null = True, blank=False )
-    gprojekte          = models.CharField   ( 'Gemeinschaftliche Projekte',  max_length = 64, choices=GPROJEKTE, help_text="Gemeinschaftliche Projekte", null = True, blank=False )
-    oekologie      =   models.CharField   ( 'Ökologie',  max_length = 2048, help_text="Ökologie", null = True, blank=False )
-    freiraumangebote   = models.CharField   ( 'Freiraumangebote',  max_length = 64, choices=FREIANGEBOT, help_text="Freiraumangebote", null = True, blank=False )
-    gaestwohnungen     = models.IntegerField( 'Wieviele Personen arbeiten im Haus', help_text="Anzahl an Wohnungen", validators=[MinValueValidator(0)], default = 0 )
+    gemeinschaftr      = MultiSelectField ( 'Gemeinschaftsräume',    max_length = 4096,   choices=GEMEINSCHAFTR, help_text="Gemeinschaftsräume", null = True, blank=True )
+    sonderwohnformen   = CharField        ( 'Sonderwohnformen',   max_length = 2048,  help_text="Sonderwohnformen, z.B. Wohncluster, WGs, Sonstiges", null = True, blank=True )
+    raumangebot        = MultiSelectField ( 'Raumangebot nach Außen',    max_length = 4096,   choices=RAUMANGEBOT, help_text="Raumangebot nach Außen", null = True, blank=True )
+    parbeiten          = IntegerField     ( 'Wie viele Personen arbeiten im Haus', help_text="Wie viele Personen arbeiten im Haus", validators=[MinValueValidator(0), MaxValueValidator(9999)], null = True, blank=True )
+    karbeiten          = CharField        ( 'Wie viele Personen arbeiten im Haus - Kommentar',   max_length = 2048,  help_text="Kommentar", null = True, blank=True )
+    bauweise           = CharField        ( 'Bauweise',  max_length = 64, choices=BAUWEISE, help_text="Bauweise", null = True, blank=True )
+    zielgruppen        = CharField        ( 'Besondere Zielgruppen',  max_length = 64, choices=ZIELGRUPPEN, help_text="Besondere Zielgruppen", null = True, blank=True )
+    gprojekte          = CharField        ( 'Gemeinschaftliche Projekte',  max_length = 64, choices=GPROJEKTE, help_text="Gemeinschaftliche Projekte", null = True, blank=True )
+    oekologie          = CharField        ( 'Ökologie',  max_length = 2048, help_text="Ökologie", null = True, blank=True )
+    freiraumangebote   = CharField        ( 'Freiraumangebote',  max_length = 64, choices=FREIANGEBOT, help_text="Freiraumangebote", null = True, blank=False )
+    gaestwohnungen     = IntegerField     ( 'Anzahl an Gästewohnungen', help_text="Anzahl an Gästewohnungen", validators=[MinValueValidator(0)], default = 0 )
 
 @receiver(post_delete, sender=Product)
 def auto_delete_reverse_keys(sender, instance, **kwargs):
@@ -372,9 +376,9 @@ def auto_delete_reverse_keys(sender, instance, **kwargs):
 
 
 class Link(models.Model):
-    Product = models.ForeignKey(Product, on_delete=models.CASCADE)
-    link_description = models.CharField(null=True, blank=True, max_length = 2048)
-    link = models.URLField(null=True, blank=True, max_length = 2048)
+    Product = ForeignKey(Product, on_delete=models.CASCADE)
+    link_description = CharField(null=True, blank=True, max_length = 2048)
+    link = URLField(null=True, blank=True, max_length = 2048)
 
 def Product_path(instance, filename):
     return 'marktplatz/media/{0}/{1}'.format(instance.Product.id, filename)
@@ -383,12 +387,12 @@ def Product_path(instance, filename):
 class Media(models.Model):
     fs = FileSystemStorage(location=settings.MEDIA_ROOT)
 
-    Product = models.ForeignKey(Product, on_delete=models.CASCADE)
-    name_for = models.CharField(blank = True,max_length = 256)
+    Product = ForeignKey(Product, on_delete=models.CASCADE)
+    name_for = CharField(blank = True,max_length = 256)
 
-    filename = models.CharField(max_length = 100)
-    copyright = models.CharField(blank=True, max_length = 100)
-    image = models.ImageField(upload_to=Product_path,storage=fs)
+    filename = CharField(max_length = 100)
+    copyright = CharField(blank=True, max_length = 100)
+    image = ImageField(upload_to=Product_path,storage=fs)
     image_small = ProcessedImageField(upload_to=Product_path,
                                       processors=[ResizeToCover(640, 360)],
                                       format='JPEG',
@@ -511,12 +515,12 @@ def auto_delete_file_on_delete(sender, instance, **kwargs):
 
 
 class Video(models.Model):
-    Product = models.ForeignKey(Product, on_delete=models.CASCADE)
-    name_for = models.CharField(blank=True, max_length=256)
+    Product = ForeignKey(Product, on_delete=models.CASCADE)
+    name_for = CharField(blank=True, max_length=256)
 
-    filename = models.CharField(max_length=100)
-    copyright = models.CharField(blank=True, max_length=100)
-    image = models.FileField(upload_to=Product_path)
+    filename = CharField(max_length=100)
+    copyright = CharField(blank=True, max_length=100)
+    image = FileField(upload_to=Product_path)
 
 @receiver(models.signals.post_delete, sender=Video)
 def auto_delete_video_on_delete(sender, instance, **kwargs):
@@ -551,10 +555,10 @@ def auto_delete_video_on_delete(sender, instance, **kwargs):
 
 
 class Vote(models.Model):
-    Product = models.ForeignKey(Product, on_delete=models.CASCADE)
-    juryMember = models.ForeignKey(User, on_delete = models.CASCADE)
-    vote = models.PositiveSmallIntegerField(default=0)
-    comment = models.CharField(blank=True, max_length =300)
+    Product = ForeignKey(Product, on_delete=models.CASCADE)
+    juryMember = ForeignKey(User, on_delete = models.CASCADE)
+    vote = PositiveSmallIntegerField(default=0)
+    comment = CharField(blank=True, max_length =300)
 
     def __iter__(self):
         for field in self._meta.fields:

+ 1 - 1
marktplatz/views.py

@@ -329,7 +329,7 @@ class importOldProducts(LoginRequiredMixin, TemplateView):
                 description.save()
 
 
-                Product.name=row['Product title']
+                Product.title=row['Product title']
                 Product.country = row['Country']
                 Product.city = row['City']
                 Product.year = row['Year of completion']

+ 1 - 0
project_base/settings.py

@@ -254,6 +254,7 @@ INSTALLED_APPS = [
     'project_base.apps.ConstanceBase',
     'constance.backends.database',
     'imagekit',
+    'multiselectfield',
     'crispy_forms',
     'django_file_form',
     'django_file_form.ajaxuploader',

+ 1 - 0
requirements.txt

@@ -10,3 +10,4 @@ django-constance[database]==2.6.0
 django-picklefield==2.1.1
 django-countries==5.5
 django-simple-captcha==0.5.12
+django-multiselectfield==0.1.12