Merge branch 'master' of github.com:mvpdev/eav

This commit is contained in:
ksamuel 2010-09-07 13:52:41 +00:00
commit 4c09a4ee26
2 changed files with 21 additions and 8 deletions

View file

@ -5,6 +5,7 @@ from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
class EavSlugField(models.SlugField):
def validate(self, value, instance):
@ -15,6 +16,7 @@ class EavSlugField(models.SlugField):
u"not start with a number, and contain "\
u"only letters, numbers, or underscores."))
@staticmethod
def create_slug_from_name(name):
'''
@ -27,5 +29,14 @@ class EavSlugField(models.SlugField):
# Remove non alphanumeric characters
return re.sub('[^\w]', '', name)
class EavDatatypeField(models.SlugField):
def validate(self, value, instance):
from .models import EavAttribute
if not instance.pk:
return
if value != EavAttribute.objects.get(pk=instance.pk).datatype:
raise ValidationError(_(u"You cannot change the datatype of an "
u"existing attribute."))

View file

@ -2,11 +2,12 @@ import re
from datetime import datetime
from django.db import models
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from .fields import EavSlugField
from .fields import EavSlugField, EavDatatypeField
class EavAttributeLabel(models.Model):
@ -58,7 +59,7 @@ class EavAttribute(models.Model):
blank=True, null=True,
help_text=_(u"Short description"))
datatype = models.CharField(_(u"data type"), max_length=6,
datatype = EavDatatypeField(_(u"data type"), max_length=6,
choices=DATATYPE_CHOICES)
created = models.DateTimeField(_(u"created"), default=datetime.now)
@ -74,6 +75,7 @@ class EavAttribute(models.Model):
self.full_clean()
super(EavAttribute, self).save(*args, **kwargs)
def add_label(self, label):
label, created = EavAttributeLabel.objects.get_or_create(name=label)
label.eavattribute_set.add(self)
@ -159,11 +161,11 @@ class EavValue(models.Model):
self.full_clean()
super(EavValue, self).save(*args, **kwargs)
def clean(self):
pass
def _blank(self):
self.value_text = self.value_float = self.value_int = self.value_date = None
self.value_bool = False
for field in self._meta.fields:
if field.name.startswith('value_') and field.null == True:
setattr(self, field.name, None)
def _get_value(self):
return getattr(self, 'value_%s' % self.attribute.datatype)