Поле симпатичного выбора для модели Django - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь разработать собственный способ претворения предпочтений в модели 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...