2013-11-05 13 views
21

aus der Dokumentation:Django REST-Framework Serializer Feld erforderlich = false

read_only auf true gesetzt ist, um sicherzustellen, dass das Feld verwendet wird, wenn eine Darstellung der Serialisierung, werden aber nicht verwendet, wenn eine Instanz bei der Deserialisierung zu aktualisieren.

Defaults auf False

erforderlich Normalerweise wird ein Fehler ausgelöst werden, wenn ein Feld bei der Deserialisierung nicht geliefert wird. Setzen Sie den Wert auf false, wenn dieses Feld während der Deserialisierung nicht benötigt wird.

Standardeinstellung ist True. So

Ich habe ein Modell, das ein Feld hat, die keine Nullwerte enthalten ist, aber ich will es in der pre_save Methode aufgefüllt werden, so habe ich das Feld zu required=False in Serializer gesetzt, aber scheint nicht zu funktionieren. Ich bekomme immer noch Fehler beim Speichern des Datensatzes.

class FavoriteListSerializer(serializers.ModelSerializer): 
    owner = serializers.IntegerField(required=False) 
    class Meta: 
     model = models.FavoriteList 

Update: Ich habe serializer_class = serializers.FavoriteListSerializer zum Viewset hinzugefügt, nun statt This field is required zu bekommen, die ich über die Validierung bekam denken, aber dann This field cannot be null. ich bekomme ich die pre_save Methode überprüft haben, nicht ausgeführt wird, irgendwelche Ideen ?

Antwort

26

Yeah, ich habe dieses Problem auch irgendwann gesehen. Sie müssen auch die Gültigkeitsausschlüsse aktualisieren.

class FavoriteListSerializer(serializers.ModelSerializer): 
    owner = serializers.IntegerField(required=False) 
    class Meta: 
     model = models.FavoriteList 

    def get_validation_exclusions(self): 
     exclusions = super(FavoriteListSerializer, self).get_validation_exclusions() 
     return exclusions + ['owner'] 
+0

Hmmm Ich sehe, basierend auf Ihrer Antwort habe ich versucht, Validatoren = [] Serializer Felder hinzufügen und immer noch nicht funktioniert. Diese Art von Dingen funktioniert nicht wie angekündigt ... –

+0

Haben Sie die 'get_validation_exclusions()' Methode hinzugefügt? Es überschreibt die vorhandenen Validierungen im Modell. –

+0

Ja nach dem Hinzufügen funktioniert diese Methode. Ich habe versucht, validators = [] hinzufügen, um zu vermeiden, get_validation_exclusions() überschreiben, aber es hat nicht funktioniert –

5

Falls jemand hier mit einem ähnlichen Problem landet, achten Sie auf die folgenden Attribute zusammen mit required:

allow_blank:

Wenn auf True dann der leere Zeichenkette sollte einen gültigen Wert in Betracht gezogen werden .

allow_null:

Normalerweise wird ein Fehler ausgelöst werden, wenn None zu einem Serializer Feld geführt wird.

required:

Normalerweise wird ein Fehler ausgelöst werden, wenn ein Feld nicht während der Deserialisierung geliefert wird.

Ich war zerstreuten, um herauszufinden, warum ich einen Fehler bei der Überprüfung mit required=False bekommen, wo ich das allow_null Attribut verpasst hatte.

+0

Überprüfen Sie auch, ob die Datenbank Spalten mit der Option NOT NULL enthält. – ozw1z5rd

Verwandte Themen