/ / Який рекомендований підхід для перевірки SlugField в системі DJANGO REST? - django, django-rest-framework

Який рекомендований підхід до перевірки SlugField в системі DJANGO REST? - django, django-rest-framework

Я будую RESTful API, використовуючи систему Django REST. Один з моїх моделей виглядає приблизно так:

class Zone(models.Model):
name = models.SlugField(max_length=50, unique=True)
... other fields

Тому я створив серіалізатор подібним чином:

class ZoneSerializer(serializers.ModelSerializer):

class Meta:
model = Zone
fields = ("name", ... other fields)

Коли ви розміщуєте дані для створення нової зони, я не знаю, скільки повноважень я перевіряю, і скільки повинно відбуватися автоматично. Я спробував виконати наступні тестові випадки:

  1. Коли name є дійсним значком, що становить 50 символів або менше, перевірка виконується успішно.
  2. Коли name є дійсним значком з 50+ символів, перевірка не виконується з відповідним повідомленням про помилку.
  3. Коли name це недійсний куль (наприклад, "abc def"), перевірка досягає успіху, а зона створюється з недійсним іменем.

Копаючи в код я бачу, що довжина поля полягає в перевірці django.core.validators.MaxLengthValidator в run_validators в rest_framework/fields.py, але validate_slug не входить до списку валідаторів.

Я знаю, що можу додати validate_name Метод мого серіалізатора такий:

def validate_name(self, attrs, source):
"""
Make sure this is a slug field
"""
value = attrs[source]
if not validators.validate_slug(value):
raise serializers.ValidationError("Not a slug")
return attrs

але це схоже на перегрівання. Чи я тут щось роблю?

Відповіді:

2 для відповіді № 1

Схоже, у ньому є дійсний запит тягти. :) validate_slug ймовірно, має відбуватися автоматично.

Кращий курс дій:

  1. Подвійна перевірка польової поведінки Django слизовиків у відношенні поведінки поля серійного пристрою REST - чи вони напевно різні?
  2. Підніміть квиток на випуск, зазначивши те, що ви визначили з (1).
  3. Спробуйте написати несправний тестовий випадок і подайте його як запит тягнути.
  4. Оновіть PR за допомогою виправлення, якщо це можливо.
  5. Прибуток !!! 11 !!!! (Ну, отримай своє ім'я в кредитах, і отримаєте приємні теплі відчуття, що внесли свій внесок у виправлення)

Ура,

Том