我的班级看起来像这样:
class Foo(models.Model):
known_by = JSONField()
我的数据看起来像这样
{ "known_by" : [
{'by':'name1', 'value':['def']},
{'by':'name2', 'value':['bar']}
]
}
我有什么方法可以强制Jsonfield
需要遵循by,value[]
dict的格式。我知道如何使用serialiazers
任何其他更简洁的方法来强制执行此操作(在模型定义中)?感谢
答案 0 :(得分:4)
您可以在模型字段中添加验证器,如下所示:
class Foo(models.Model):
known_by = ArrayField(JSONField(max_length=100), size=4, validators=[a_json_array_validator])
验证器是:
def a_json_array_validator(value):
if any([not is_json_valid(entry) for entry in value]):
raise ValidationError(
_('%(value) is not a valid json'),
params={'value': value},
)
(实际的json验证取决于你);-) 请注意,验证器接收python对象,因此它实际上是一个字典。
答案 1 :(得分:1)
你可以这样实现:
from django.db import models
class Bar(models.Model):
by = models.CharField()
value = models.ArrayField()
class Foo(models.Model):
known_by = models.ForeignKey(Bar, on_delete=models.CASCADE)
答案 2 :(得分:0)
为什么不覆盖save方法来执行?
class Foo(models.Model):
known_by = JSONField()
def save(self, *args, **kwargs):
# begin validation code
# end validation code
if valid:
super(Model, self).save(*args, **kwargs)
else:
# something else, maybe http error code?