【发布时间】:2019-09-06 03:51:24
【问题描述】:
我正在为 mysql 数据库编写名为 EnumField 的自定义模型字段,如下所示
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
【问题讨论】:
标签: python mysql django django-models