Django模型的漂亮选择字段

时间:2019-05-23 13:28:21

标签: django

我正在尝试开发一种自定义方式来实现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。

0 个答案:

没有答案