/ / Jakie jest zalecane podejście do sprawdzania poprawności SlugField w środowisku Django REST? - django, django-rest-framework

Jakie jest zalecane podejście do sprawdzania poprawności SlugField w frameworku Django REST? - django, django-rest-framework

Buduję RESTful API przy użyciu struktury REST Django. Jeden z moich modeli wygląda trochę tak:

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

Więc zbudowałem serializator w ten sposób:

class ZoneSerializer(serializers.ModelSerializer):

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

Podczas publikowania danych w celu utworzenia nowej strefy, nie jestem pewien, za jaką walidację odpowiadam i jak wiele powinno się odbywać automatycznie. Próbowałem następujących przypadków testowych:

  1. Gdy name jest poprawnym błędem liczącym 50 znaków lub mniej, sprawdzanie poprawności się powiedzie.
  2. Gdy name jest poprawnym błędem składającym się z ponad 50 znaków, sprawdzanie poprawności kończy się niepowodzeniem z odpowiednim komunikatem o błędzie.
  3. Gdy name jest nieprawidłowym plikiem (np. "abc def"), sprawdzanie poprawności kończy się pomyślnie i tworzona jest strefa z niepoprawną nazwą.

Wkopując się w kod widzę, że długość pola jest sprawdzane przez django.core.validators.MaxLengthValidator w run_validators w rest_framework/fields.py, ale validate_slug nie znajduje się na liście walidatorów.

Wiem, że mogę dodać validate_name metoda do mojego serializera w ten sposób:

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

ale wydaje się to przesadą. Czy robię coś złego tutaj?

Odpowiedzi:

2 dla odpowiedzi № 1

Wygląda na to, że istnieje ważne żądanie ściągnięcia. :) validate_slug prawdopodobnie powinno nastąpić automatycznie.

Najlepszy sposób działania:

  1. Dokładnie sprawdź zachowanie pola formularza Django w odniesieniu do zachowania pola serializera w strukturze REST - czy są one zdecydowanie inne?
  2. Podnieś bilet na wydanie, zauważając, co określiłeś (1).
  3. Spróbuj napisać nieudany test testowy i prześlij go jako żądanie ściągnięcia.
  4. Zaktualizuj PR z poprawką, jeśli to możliwe.
  5. Zysk! 11 !!!! (Cóż, weź swoje nazwisko w napisach i ciesz się, że przyczyniłeś się do naprawy)

Twoje zdrowie,

Tomek