Как проверить атрибуты поля пользовательской модели django? - PullRequest
0 голосов
/ 16 апреля 2019

Я пишу поле пользовательской модели с именем EnumField для базы данных mysql, которое выглядит ниже

class EnumField(models.Field):

    def __init__(self, *args, **kwargs):
       self.values = kwargs['values']
       kwargs['choices'] = [(key, value) for key, value in self.values]
       super().__init__(*args, **kwargs)

    def db_type(self, connection):
       enum_values = ",".join([key for key, value in self.values])
       return f"ENUM({enum_values})"

Я надеюсь, что это работает хорошо, но я не могу найти способ применить ограничения, такие как атрибут values должен быть list или tuple., А атрибут values ​​должен содержать уникальный ключ и значения.

например, если кто-то пытается использовать EnumField, как показано ниже, с duplicate values или isinstance(values) - это не tuple or list, мне нужно выдать исключение. Как я могу этого добиться.

class MyModel(models.Model)
    field1 = EnumField(values=(('Y', 'yes'), 'Y', 'Yes')) //Invalid &need to raise exception
    field2 = EnumField(values=(('Y', 'yes'), ('N', 'No'))) // valid
    field3 = EnumField(values="check") //invalid & need to raise exception
    field4 = EnumField(values=[1,2,3]) //Invalid & need to raise exception
    field5 = EnumField(values=[('LIVE', 'Live'), ('OFFLINE', 'Offline')]) //valid

1 Ответ

0 голосов
/ 16 апреля 2019

Уникально то, что вы хотите

Вот ссылка на документацию

Если вы не хотите, чтобы это происходило на уровне базы данных, вам нужен код Python, подобный этому

if isinstance(var, tuple):
    do something
else:
    raise forms.ValidationError("Not a tuple")
...