diff --git a/models.py b/models.py index 253e0bf..034fbf7 100644 --- a/models.py +++ b/models.py @@ -25,6 +25,23 @@ class EavAttributeLabel(models.Model): return self.name +class EnumValue(models.Model): + value = models.CharField(_(u"value"), db_index=True, + unique=True, max_length=50) + + def __unicode__(self): + return self.value + + +class EnumGroup(models.Model): + name = models.CharField(_(u"name"), unique=True, max_length=100) + + enums = models.ManyToManyField(EnumValue, verbose_name=_(u"enum group")) + + def __unicode__(self): + return self.name + + class EavAttribute(models.Model): ''' The A model in E-A-V. This holds the 'concepts' along with the data type @@ -45,7 +62,7 @@ class EavAttribute(models.Model): TYPE_DATE = 'date' TYPE_BOOLEAN = 'bool' TYPE_OBJECT = 'object' - #TYPE_MANY = 'many' + TYPE_ENUM = 'enum' DATATYPE_CHOICES = ( (TYPE_TEXT, _(u"Text")), @@ -54,7 +71,7 @@ class EavAttribute(models.Model): (TYPE_DATE, _(u"Date")), (TYPE_BOOLEAN, _(u"True / False")), (TYPE_OBJECT, _(u"Python Object")), - #(TYPE_MANY, _('multiple choices')), + (TYPE_ENUM, _(u"Multiple Choice")), ) slug = EavSlugField(_(u"slug"), max_length=50, db_index=True, @@ -64,9 +81,13 @@ class EavAttribute(models.Model): name = models.CharField(_(u"name"), max_length=100, help_text=_(u"User-friendly attribute name")) - help_text = models.CharField(_(u"help text"), max_length=256, - blank=True, null=True, - help_text=_(u"Short description")) + description = models.CharField(_(u"description"), max_length=256, + blank=True, null=True, + help_text=_(u"Short description")) + + @property + def help_text(self): + return self.description datatype = EavDatatypeField(_(u"data type"), max_length=6, choices=DATATYPE_CHOICES) @@ -78,6 +99,7 @@ class EavAttribute(models.Model): labels = models.ManyToManyField(EavAttributeLabel, verbose_name=_(u"labels")) + def save(self, *args, **kwargs): if not self.slug: self.slug = EavSlugField.create_slug_from_name(self.name) @@ -180,6 +202,7 @@ class EavValue(models.Model): value_int = models.IntegerField(blank=True, null=True) value_date = models.DateTimeField(blank=True, null=True) value_bool = models.NullBooleanField(blank=True, null=True) + value_enum = models.ForeignKey(EnumValue, blank=True, null=True) generic_value_id = models.IntegerField(blank=True, null=True) generic_value_ct = models.ForeignKey(ContentType, blank=True, null=True, @@ -204,7 +227,6 @@ class EavValue(models.Model): for field in self._meta.fields: if field.name.startswith('value_') and field.null == True: setattr(self, field.name, None) - self.value_bool = False def _get_value(self):