src/core/models/term.py
changeset 61 0048668779c0
parent 55 bcbd95da9be2
child 62 33fd91a414cc
equal deleted inserted replaced
60:0aaf74c6305b 61:0048668779c0
     7 
     7 
     8 from .. import settings
     8 from .. import settings
     9 from django.contrib.auth import get_user_model
     9 from django.contrib.auth import get_user_model
    10 from django.db import models
    10 from django.db import models
    11 from django.utils.translation import ugettext as _
    11 from django.utils.translation import ugettext as _
       
    12 from mptt.models import MPTTModel, TreeForeignKey
    12 import datetime
    13 import datetime
    13 import logging
    14 import logging
    14 
    15 
    15 logger = logging.getLogger(__name__)
    16 logger = logging.getLogger(__name__)
    16 
    17 
    77         
    78         
    78     def __unicode__(self):
    79     def __unicode__(self):
    79         return self.label
    80         return self.label
    80 
    81 
    81 
    82 
    82 class Term(models.Model):
    83 class Term(MPTTModel):
    83     label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
    84     label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
    84     lang = models.CharField(max_length=128, unique=False, blank=True, null=True, db_index=True)
    85     lang = models.CharField(max_length=128, unique=False, blank=True, null=True, db_index=True)
    85     uri = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
    86     uri = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
    86     normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
    87     normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
    87     wp_label = models.CharField(max_length=1024, unique=False, blank=True, null=True, db_index=True)
    88     wp_label = models.CharField(max_length=1024, unique=False, blank=True, null=True, db_index=True)
   101     validator = models.ForeignKey(User, null=True, blank=True, serialize=False)
   102     validator = models.ForeignKey(User, null=True, blank=True, serialize=False)
   102     wikipedia_edition = models.BooleanField(default=False, blank=False, null=False)
   103     wikipedia_edition = models.BooleanField(default=False, blank=False, null=False)
   103     
   104     
   104     nb_notice = models.IntegerField(blank=False, null=False, default=0, db_index=True, editable=False)
   105     nb_notice = models.IntegerField(blank=False, null=False, default=0, db_index=True, editable=False)
   105     notices = models.ManyToManyField('core.Notice', related_name="terms+", through="core.NoticeTerm")
   106     notices = models.ManyToManyField('core.Notice', related_name="terms+", through="core.NoticeTerm")
       
   107     
       
   108     parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
   106     
   109     
   107     @property
   110     @property
   108     def alternative_labels_str(self):
   111     def alternative_labels_str(self):
   109         return " | ".join([l.label for l in self.alternative_labels.all() if l.label != self.label])
   112         return " | ".join([l.label for l in self.alternative_labels.all() if l.label != self.label])
   110     
   113     
   138             self.validation_date = None
   141             self.validation_date = None
   139             self.save()
   142             self.save()
   140     
   143     
   141     class Meta:
   144     class Meta:
   142         app_label = 'core'
   145         app_label = 'core'
       
   146         
       
   147     class MPTTMeta:
       
   148         order_insertion_by = ['normalized_label']
   143 
   149 
   144 class TermLabel(models.Model):
   150 class TermLabel(models.Model):
   145     label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
   151     label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
   146     lang = models.CharField(max_length=128, unique=False, blank=True, null=True, db_index=True)
   152     lang = models.CharField(max_length=128, unique=False, blank=True, null=True, db_index=True)
   147     term = models.ForeignKey(Term, blank=False, null=False, db_index=True, related_name="alternative_labels")
   153     term = models.ForeignKey(Term, blank=False, null=False, db_index=True, related_name="alternative_labels")