src/protocols/models/core.py
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 142 56850f5c73f6
permissions -rw-r--r--
Change the settings to avoid using Session authentication for rest framework as it raise exceptions in case client and backend are on the same domain On the filter, adapt to take into account new version of django_filters
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
142
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import uuid
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
from concurrency.fields import AutoIncVersionField
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from django.conf import settings
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from django.core.exceptions import ValidationError
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
from django.db import models
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from django.utils.translation import ugettext_lazy as _
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from .managers import MetacategoryManager, ProtocolManager
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
# Create your models here.
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
class Protocol(models.Model):
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
    ext_id = models.UUIDField(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
        unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    owner = models.CharField(max_length=512, verbose_name=_('Protocol|owner'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    app = models.ForeignKey(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        settings.AUTH_USER_MODEL,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        on_delete=models.CASCADE,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        null=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        blank=True
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    )
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    def last_revision(self):
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        return self.revisions.first()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    objects = ProtocolManager()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
class ProtocolRevision(models.Model):
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    ext_id = models.UUIDField(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    protocol = models.ForeignKey(Protocol, on_delete=models.CASCADE,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
                                 related_name="revisions", verbose_name=_('ProtocolRevision|protocol'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    version = AutoIncVersionField(verbose_name=_('Model|version'), db_index=True)
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    title = models.CharField(max_length=512, null=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
                             blank=True, verbose_name=_('ProtocolRevision|title'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    description = models.TextField(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        null=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        blank=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        verbose_name=_('ProtocolRevision|description')
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
    )
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    metacategories = models.ManyToManyField('protocols.MetacategoryRevision', related_name="protocols")
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    class Meta:
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        ordering = ['-version',]
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
class Metacategory(models.Model):
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    objects = MetacategoryManager()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    ext_id = models.UUIDField(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    app = models.ForeignKey(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        settings.AUTH_USER_MODEL,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        on_delete=models.SET_NULL,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        null=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        blank=True
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    )
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    label = models.CharField(max_length=512, verbose_name=_('Metacategory|label'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    title = models.CharField(max_length=512, verbose_name=_('Metacategory|title'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    description = models.TextField(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        null=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
        blank=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        verbose_name=_('Metacategory|description')
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    )
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    color = models.CharField(max_length=18, verbose_name=_('Metacategory|color'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    has_comment = models.BooleanField()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    is_default = models.BooleanField()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    def last_revision(self):
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        return self.revisions.first()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
class MetacategoryRevision(models.Model):
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    ext_id = models.UUIDField(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        unique=True, default=uuid.uuid4, verbose_name=_('Model|ext_id'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    version = AutoIncVersionField(verbose_name=_('Model|version'), db_index=True)
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    # protocol = models.ForeignKey(ProtocolRevision, on_delete=models.CASCADE)
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    base = models.ForeignKey(Metacategory, on_delete=models.CASCADE,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
                             related_name="revisions", verbose_name=_('MetacategoryRevision|base'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    label = models.CharField(max_length=512, verbose_name=_('Metacategory|label'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    title = models.CharField(max_length=512, verbose_name=_('Metacategory|title'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    description = models.TextField(
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
        null=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        blank=True,
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        verbose_name=_('Metacategory|description')
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    )
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    color = models.CharField(max_length=18, verbose_name=_('Metacategory|color'))
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    has_comment = models.BooleanField()
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    class Meta:
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
        ordering = ['-version',]