mirror of
https://github.com/jazzband/django-eav2.git
synced 2026-05-04 13:44:50 +00:00
Merge branch 'master' of github.com:mvpdev/eav
This commit is contained in:
commit
4c09a4ee26
2 changed files with 21 additions and 8 deletions
15
fields.py
15
fields.py
|
|
@ -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."))
|
||||
|
|
|
|||
14
models.py
14
models.py
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue