2015-07-14 12 views

Odpowiedz

1

Django Rest Framework Serializer ma initial opcje ustawiania wartości dafault pola.

g = serializers.BooleanField(initial=True) 
d = serializers.IntegerField(initial=0) 

http://www.django-rest-framework.org/api-guide/fields/

+1

Czy to nie będzie zapisywać jako "True" i "0" zamiast "Brak", jak pytanie? – bakkal

+1

Próbowałem twojej sugestii, ale nawet jeśli ustawię ją na 0 dla d, to nadal otrzymuję błąd. – felix001

4

różnych wariantów postępowania z pustymi, pustych i zerowych pól są (koniecznie) trochę subtelna, więc jej dziwić, że ludzie się czasem wycieczki.

wiem jak na dokumentacji następujące pola nie biorą allow_blank = True i allow_null = True

To błędne:

  • IntegerField(allow_null=True) jest prawidłowy.
  • Jeśli chcesz zezwolić na wartości zerowe dla pól boolowskich, musisz użyć klasy NullBooleanField().

Masz rację, że żaden z nich nie przyjmuje wartości allow_blank, ponieważ pusty ciąg nie będzie prawidłową wartością w obu przypadkach.


potrzebne w celu umożliwienia klientowi nie określa g albo D (jak na niżej) oraz do przechowywania wartość w dB, jak Żaden.

Można użyćIntegerField(default=None) i NullBooleanField(default=None).

W takim przypadku, gdy wartości zostaną pominięte, zostaną one podane jako None w serializer.validated_data. Upewnij się, że używasz null=True/NullBooleanField w polu modelu.

LubIntegerField(required=False) i NullBooleanField(required=False).

W takim przypadku, gdy wartości zostaną pominięte, nie będą one zawarte w serializer.validated_data, a użyte zostanie domyślne pole modelu. Upewnij się, że używasz default=None i null=True/NullBooleanField w polu modelu.


Należy zauważyć, że nastąpił błąd podczas korzystania z interfejsu API do przeglądania że puste pola w wejściu HTML did not get the default values set. Zostało to rozwiązane w the upcoming 3.1.4 release.

Argument przedstawiony w odpowiedzi Edwina może być przydatny, ale służy do ustawiania wartości początkowo renderowanej w polach formularza HTML.