У меня есть длинный список кортежей, используемых в качестве выбора модели. В настоящее время они являются атрибутами класса в определении модели. Я хотел бы переместить их в миксин, не затрагивая существующие ссылки в устаревшей кодовой базе.
Вот что существует в настоящее время:
class MyModel(models.Model):
COLD = 1
WARM = 2
HOT = 3
FIRE = 4
STATUSES = (
(COLD, 'Cold'),
(WARM, 'Warm'),
(HOT, 'Hot'),
(FIRE, 'Fire'),
)
status = models.IntegerField(choices=STATUSES)
Вот что я хотел бы сделать:
class StatusMixin:
COLD = 1
WARM = 2
HOT = 3
FIRE = 4
STATUSES = (
(COLD, 'Cold'),
(WARM, 'Warm'),
(HOT, 'Hot'),
(FIRE, 'Fire'),
)
class MyModel(StatusMixin, models.Model):
status = models.IntegerField(choices=STATUSES)
Я пытаюсь сослаться на них:
- В рамках наследующей им модели:
my_model_instance = MyModel.objects.get(id=1)
if my_model_instance.status == MyModel.FIRE:
return
Как часть модели, НЕ наследующей их, но ссылающейся на модель, которая наследует:
class OtherModel(models.Model):
my_model_status = models.IntegerField(choices=MyModel.STATUSES)
Я не могу удовлетворить оба условия. Я уверен, что есть способ получше - может, не миксин?