【问题标题】:Django model validation on blank valuesDjango模型验证空白值
【发布时间】: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


    【解决方案1】:

    我找到了https://stackoverflow.com/a/56271722/918558,这表明我可以通过执行以下操作来解决此问题:

    def validate_dict(value):
        if not isinstance(value, dict):
            raise ValidationError(
                '"%(value)s" is not valid JSON',
                params={'value': value},
            )
    
    
    class DictJSONField(JSONField):
        empty_values = [{}]
        default_validators = [validate_dict]
    
    
    class MyModel(models.Model):
        json = DictJSONField(default=dict, blank=True)
    

    您似乎总是在 SO 中提出问题后立即找到答案。 (虽然我还没有测试过)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2013-05-18
      • 2020-01-22
      • 2019-12-24
      • 2021-08-05
      • 2010-12-10
      相关资源
      最近更新 更多