我正在为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
,则我需要抛出异常。如何实现该目标。 / p>
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
答案 0 :(得分:0)
如果您不希望在数据库级别发生这种情况,则需要这样的python代码
if isinstance(var, tuple):
do something
else:
raise forms.ValidationError("Not a tuple")