Lets sagen, ich habe ein Modell wie folgt:verschiedene Validierung in DRF Serializer pro Anforderungsverfahren
class MyModel(models.Model):
first_field = models.CharField()
second_field = models.CharField()
und eine API Ansicht wie folgt:
class MyModelDetailAPI(GenericAPIView):
serializer_class = MyModelSerializer
def patch(self, request, *args, **kwargs):
# Do the update
def post(self, request, *args, **kwargs):
# Do the post
Die first_field
ist ein Feld, das nur eingelegt ist in der POST-Methode (und ist obligatorisch), aber bei jeder Aktualisierung kann der Benutzer seinen Wert nicht ändern, daher ist das Feld in der PATCH-Methode nicht obligatorisch.
Wie kann ich meinen Serializer schreiben, so dass die first_field
ist für POST erforderlich, aber nicht auf PATCH erforderlich. Gibt es eine Möglichkeit, das erforderliche Feld dynamisch zu setzen, damit ich den DRF-Validierungsmechanismus weiterhin verwenden kann? Eine Art Validator-Dispatcher pro Anfrage-Methode?
Ich möchte so etwas wie dies zum Beispiel:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = {
'POST': ['first_field']
'PATCH': []
}
Wenn das Datenformat ist nicht das gleiche, es ist nicht das gleiche Serializer ist. Machen Sie einfach zwei verschiedene Serialisierer (wahrscheinlich erbt der andere oder erbt beide eine gemeinsame Basis). – spectras
Mein Verständnis von Serialisierer ist, dass sie die Serialisierung von Rohdaten zu einer Modellinstanz und von einer Modellinstanz zu Rohdaten (JSON zum Beispiel) behandeln sollen. Die Tatsache, dass PATCH ein Teilupdate ist, kann viele verschiedene Permutationen von gesendeten Daten haben - es ist nicht logisch, einen anderen Serialisierer pro Permutation zu haben. –
Was meinst du mit "Permutation"? Objekte sind nicht geordnet, daher kann ihr Inhalt nicht permutiert werden. Wie auch immer, Sie wollen hier ein Feld hinzufügen oder entfernen. Es ist also nicht das gleiche Format. – spectras