Что делает KeysValidator в django?

#django

#django

Вопрос:

Я нашел фрагмент кода, где использовался KeysValidator, но я не понял, что делает id, поэтому я прочитал документацию https://docs.djangoproject.com/en/3.1/ref/contrib/postgres/validators / и я до сих пор этого не понимаю.

Может кто-нибудь объяснить, если у нас есть JSONField, что такое KeysValidator?

Ответ №1:

Это валидатор, который используется для JSONField проверки, является ли большой двоичный объект JSON словарем с (по крайней мере) заданными ключами или списком с заданными значениями.

Если вы укажете strict=True , он будет проверять только словари и список, которые содержат именно эти ключи / значения.

Например:

 KeysValidator(keys=['a', 'b'])({'a': 4, 'b': 2})  # valid
KeysValidator(keys=['a', 'b'])({'a': 4})  # ValidationError: ['Some keys were missing: b']
KeysValidator(keys=['a', 'b'])({})  # ValidationError: ['Some keys were missing: b, a']
KeysValidator(keys=['a', 'b'])([])  # ValidationError: ['Some keys were missing: b, a']
KeysValidator(keys=['a', 'b'])(['a', 'b'])  # succeeds
KeysValidator(keys=['a', 'b'])(['a', 'b', 'c'])  # succeeds
KeysValidator(keys=['a', 'b'], strict=True)({'a': 4, 'b': 2, 'c': 3})  # ValidationError: ['Some unknown keys were provided: c']
KeysValidator(keys=['a', 'b'], strict=True)({'a': 4, 'b': 2})  # succeeds
KeysValidator(keys=['a', 'b'], strict=True)({'a': 4, 'c': 3})  # ValidationError: ['Some keys were missing: b']
KeysValidator(keys=['a', 'b'], strict=True)(['b', 'a'])  # succeeds
KeysValidator(keys=['a', 'b'], strict=True)(['b', 'a', 'c'])  # ValidationError: ['Some unknown keys were provided: c']
  

Хотя это также работает со списками или строками, идея заключается в том, что это, вероятно, используется только для словарей.