【发布时间】:2020-06-11 23:34:10
【问题描述】:
如果您使用blank=True 定义字段,则验证正确允许空白值,如果blank=False 则空白值引发验证异常。通常它很简单,但是使用JSONField 可以有3 个不同的空白值之一,它们是:''、[]、{}。本质上,我只想允许 {} 作为唯一可接受的空白值。但是,空白值永远不会传递给自定义字段验证器,因此似乎无法通过标准方式实现。
def validate_dict(value):
if not isinstance(value, dict):
raise ValidationError(
'"%(value)s" is not valid JSON',
params={'value': value},
)
class MyModel(models.Model):
json = JSONField(default=dict, blank=True, validators=[validate_dict])
在上面的示例中,所有“空白”值都立即被视为有效,并且永远不会调用 validate_dict。如果我将blank=True 更改为blank=False,那么所有空白值都会立即被视为无效,并且永远不会再次调用validate_dict。
我想验证存储的数据是否始终为dict,但似乎无法验证空值是否仅为dict。
【问题讨论】:
标签: python django django-models django-forms django-validation