2015-01-26 13 views
5

Korzystanie z pól pudełku w serializatora, komunikaty o błędach walidacji wyglądać tak:kody i komunikaty walidacji w Django Rest ram

{ 
    "product": [ 
     "This field must be unique." 
    ], 
    "price": [ 
     "This field is required." 
    ] 
} 

Jednak dla API piszę, chciałbym, aby zapewnić unikalny kod błędu dla każdego niepowodzenia sprawdzania poprawności, dzięki czemu klienci mogą programowo reagować na błędy sprawdzania poprawności lub mogą dostarczać własne niestandardowe komunikaty w interfejsie użytkownika. Idealnie json błąd będzie wyglądać mniej więcej tak:

{ 
    "product": [ 
     { 
      "code": "unique", 
      "message": "This field must be unique." 
     } 
    ], 
    "price": [ 
     { 
      "code": "required", 
      "message": "This field is required." 
     } 
    ] 
} 

Obecne podejście używając ValidationErrors czyni to raczej trudne. Przeglądając kod, wydaje się, że ten typ raportowania błędów nie jest obecnie obsługiwany. Jednak szukam sposobu na zastąpienie obsługi błędów w celu dopasowania do tego modelu.

+0

mógłbyś zastąpić 'metody Serializer.is_valid', złapać ValidationError, i zmienić sposób jest ona dodawana do słownika błędy? Zakłada to, że DRF lub Django dodaje wartości 'code', których szukasz. – kdazzle

+0

Niech zgadnę: używasz newforms (https://github.com/insin/newforms) – Catskul

+0

W rzeczywistości istnieją dyskusje na temat osadzenia takiego wsparcia w DRF, zobacz https://github.com/tomchristie/django- rest-framework/pull/3169 –

Odpowiedz

1

dodać coś takiego do serializatora:

def is_valid(self, raise_exception=False): 
    try: 
     return super(ClientSerializer, self).is_valid(raise_exception) 
    except exceptions.ValidationError as e: 
     if 'email' in e.detail: 
      for i in range(len(e.detail['email'])): 
       if e.detail['email'][i] == UniqueValidator.message: 
        e.detail['email'][i] = {'code': 'not-unique'} 
     raise e 
+1

Sądzę, że szukałem czegoś bardziej ogólnego. To wymagałoby dostosowania w każdym polu i na błąd sprawdzania poprawności, prawda? –

+1

Yup. I to jest brzydkie. Problem [# 2878] (https://github.com/tomchristie/django-rest-framework/issues/2878) usunie wszystkie brzydoty po naprawieniu. – WhyNotHugo

Powiązane problemy