/ / Какъв е препоръчителният подход за валидиране на 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 метод към моя serializer така:

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

но това изглежда като overkill. Правим ли нещо погрешно тук?

Отговори:

2 за отговор № 1

Звучи, че там има валидна заявка за изтегляне. validate_slug вероятно трябва да се случи автоматично.

Най-добър начин на действие:

  1. Двойно проверете поведението на полетата на форма на Django с форма на шлюз срещу поведението на полето на сериализатора на REST - дали те определено са различни?
  2. Вдигнете билет за проблема, като отбелязвате това, което сте определили от (1).
  3. Опитайте се да напишете неуспешен тестов случай и да го подадете като заявка за изтегляне.
  4. Актуализирайте PR с корекцията, ако е възможно.
  5. Печалба !!! 11 !!!! (Добре, да си име в кредитите, и да получите хубаво горещо чувство за това, че са допринесли за фиксиране)

Наздраве,

мъжко животно