Я пытаюсь разработать собственный способ претворения предпочтений в модели Django.Я разработал класс для выбора и настраиваемое поле, например:
class Choices:
def __init__(self, *keys):
self._keys = list(keys)
def __getattr__(self, key):
return self._keys.index(key)
def __getitem__(self, index):
return self._keys[index]
def as_choices_list(self):
return list(enumerate(self._keys))
class ChoicesField(models.PositiveSmallIntegerField):
def __init__(self, *args, **kwargs):
if isinstance(kwargs['choices'], Choices):
kwargs['choices'] = kwargs['choices'].as_choices_list()
super().__init__(*args, **kwargs)
И моя тестовая модель:
class MyModel(models.Model):
TYPES = Choices('a', 'b', 'c')
type = ChoicesField(choices=TYPES, default=TYPES.a)
Когда я пытаюсь выполнить миграцию, я получаю ошибку:
ValueError: 'contribute_to_class' is not in list
Похоже, мне нужно добавить некоторую специальную реализацию в моем классе Choices
, чтобы Django считал ее не полем.
Как лучше всего решить мою проблему?
Я использую Django 2.2 и Python 3.7.