django-eav2/test_project/models.py

89 lines
1.8 KiB
Python
Raw Normal View History

import sys
if sys.version_info >= (3, 8):
from typing import Final, final
else:
from typing_extensions import Final, final
2021-10-20 14:05:23 +00:00
2021-07-04 15:58:33 +00:00
from django.db import models
from eav.decorators import register_eav
from eav.models import EAVModelMeta
2021-10-20 14:05:23 +00:00
#: Constants
MAX_CHARFIELD_LEN: Final = 254
2021-07-04 15:58:33 +00:00
class TestBase(models.Model):
"""Base class for test models."""
class Meta(object):
"""Define common options."""
app_label = 'test_project'
abstract = True
2021-10-20 14:05:23 +00:00
@final
2021-07-04 15:58:33 +00:00
class Patient(TestBase):
2021-10-20 14:05:23 +00:00
name = models.CharField(max_length=MAX_CHARFIELD_LEN)
email = models.EmailField(max_length=MAX_CHARFIELD_LEN, blank=True)
2021-07-04 15:58:33 +00:00
example = models.ForeignKey(
2021-10-20 14:05:23 +00:00
'ExampleModel',
null=True,
blank=True,
on_delete=models.PROTECT,
2021-07-04 15:58:33 +00:00
)
def __str__(self):
return self.name
def __repr__(self):
return self.name
class Encounter(TestBase):
num = models.PositiveSmallIntegerField()
patient = models.ForeignKey(Patient, on_delete=models.PROTECT)
def __str__(self):
return '%s: encounter num %d' % (self.patient, self.num)
def __repr__(self):
return self.name
@register_eav()
2021-10-20 14:05:23 +00:00
@final
2021-07-04 15:58:33 +00:00
class ExampleModel(TestBase):
2021-10-20 14:05:23 +00:00
name = models.CharField(max_length=MAX_CHARFIELD_LEN)
2021-07-04 15:58:33 +00:00
def __unicode__(self):
return self.name
@register_eav()
2021-10-20 14:05:23 +00:00
@final
2021-07-04 15:58:33 +00:00
class M2MModel(TestBase):
2021-10-20 14:05:23 +00:00
name = models.CharField(max_length=MAX_CHARFIELD_LEN)
2021-07-04 15:58:33 +00:00
models = models.ManyToManyField(ExampleModel)
def __unicode__(self):
return self.name
2021-10-20 14:05:23 +00:00
@final
2021-07-04 15:58:33 +00:00
class ExampleMetaclassModel(TestBase, metaclass=EAVModelMeta):
2021-10-20 14:05:23 +00:00
name = models.CharField(max_length=MAX_CHARFIELD_LEN)
2021-07-04 15:58:33 +00:00
def __str__(self):
return self.name
2021-10-20 14:05:23 +00:00
@final
2021-07-04 15:58:33 +00:00
class RegisterTestModel(TestBase, metaclass=EAVModelMeta):
2021-10-20 14:05:23 +00:00
name = models.CharField(max_length=MAX_CHARFIELD_LEN)
2021-07-04 15:58:33 +00:00
def __str__(self):
return self.name