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") |