diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-12 12:54:13 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-12 12:54:13 +0200 | 
| commit | cf10508b07f73cb26c8d47ce2d916853efb111c0 (patch) | |
| tree | c1c525f5e1f7b244688c282f169fac2e326fa4de /ishtar_common/models.py | |
| parent | e182eeb29cf9a7dbd936e88ee0db1b8658a0c5ce (diff) | |
| download | Ishtar-cf10508b07f73cb26c8d47ce2d916853efb111c0.tar.bz2 Ishtar-cf10508b07f73cb26c8d47ce2d916853efb111c0.zip | |
DocumentTemplate: add slug, manage natural key. Utils: create_slug function
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 27 | 
1 files changed, 24 insertions, 3 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 25270e633..b3fba3b1f 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -65,7 +65,7 @@ from django.contrib.gis.db import models  from simple_history.models import HistoricalRecords as BaseHistoricalRecords  from ishtar_common.model_merging import merge_model_objects -from ishtar_common.utils import get_cache, disable_for_loaddata +from ishtar_common.utils import get_cache, disable_for_loaddata, create_slug  from ishtar_common.data_importer import Importer, ImportFormater, \      IntegerFormater, FloatFormater, UnicodeFormater, DateFormater, \      TypeFormater, YearFormater, StrToBoolean, FileFormater @@ -415,6 +415,11 @@ def post_save_cache(sender, **kwargs):      sender.refresh_cache() +class SlugModelManager(models.Manager): +    def get_by_natural_key(self, slug): +        return self.get(slug=slug) + +  class TypeManager(models.Manager):      def get_by_natural_key(self, txt_idx):          return self.get(txt_idx=txt_idx) @@ -1594,10 +1599,13 @@ class DocumentTemplate(models.Model):      CLASSNAMES = (('archaeological_operations.models.AdministrativeAct',                    _(u"Administrative Act")),)      name = models.CharField(_(u"Name"), max_length=100) +    slug = models.SlugField(_(u"Slug"), blank=True, null=True, max_length=100, +                            unique=True)      template = models.FileField(_(u"Template"), upload_to="upload/templates/")      associated_object_name = models.CharField(          _(u"Associated object"), max_length=100, choices=CLASSNAMES)      available = models.BooleanField(_(u"Available"), default=True) +    objects = SlugModelManager()      class Meta:          verbose_name = _(u"Document template") @@ -1607,6 +1615,14 @@ class DocumentTemplate(models.Model):      def __unicode__(self):          return self.name +    def natural_key(self): +        return (self.slug, ) + +    def save(self, *args, **kwargs): +        if not self.slug: +            self.slug = create_slug(DocumentTemplate, self.name) +        return super(DocumentTemplate, self).save(*args, **kwargs) +      @classmethod      def get_tuples(cls, dct={}, empty_first=True):          dct['available'] = True @@ -1935,8 +1951,8 @@ class ImporterType(models.Model):      """      name = models.CharField(_(u"Name"), blank=True, null=True,                              max_length=100) -    slug = models.SlugField(_(u"Slug"), unique=True, blank=True, null=True, -                            max_length=100) +    slug = models.SlugField(_(u"Slug"), unique=True, max_length=100, +                            blank=True, null=True)      description = models.CharField(_(u"Description"), blank=True, null=True,                                     max_length=500)      users = models.ManyToManyField('IshtarUser', verbose_name=_(u"Users"), @@ -2029,6 +2045,11 @@ class ImporterType(models.Model):          newclass = type(name, (Importer,), args)          return newclass +    def save(self, *args, **kwargs): +        if not self.slug: +            self.slug = create_slug(ImporterType, self.name) +        return super(ImporterType, self).save(*args, **kwargs) +  def get_associated_model(parent_model, keys):      model = None | 
