Diciamo che ho un modello in questo modo:differente validazione in drf serializzatore per richiesta metodo
class MyModel(models.Model):
first_field = models.CharField()
second_field = models.CharField()
e una vista API in questo modo:
class MyModelDetailAPI(GenericAPIView):
serializer_class = MyModelSerializer
def patch(self, request, *args, **kwargs):
# Do the update
def post(self, request, *args, **kwargs):
# Do the post
Il first_field
è un campo che è inserita solo nel metodo POST (ed è obbligatorio) ma su ogni aggiornamento, l'utente non può modificare il suo valore in modo che il campo nel metodo PATCH sia non obbligatorio.
Come posso scrivere il mio serializzatore in modo che lo first_field
sia richiesto su POST ma non richiesto su PATCH. C'è un modo per impostare dinamicamente il campo richiesto così posso ancora usare il meccanismo di validazione DRF? Una sorta di dispatcher di validatori per metodo di richiesta?
Voglio qualcosa di simile, per esempio:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = {
'POST': ['first_field']
'PATCH': []
}
Se il formato dei dati non è la stessa, non è la stessa serializzatore. Basta creare due serializzatori diversi (probabilmente uno eredita l'altro o entrambi ereditano una base comune). – spectras
La mia comprensione dei serializzatori è che suppongono di gestire la serializzazione di dati grezzi in un'istanza di modello e da un'istanza di modello in dati non elaborati (ad esempio JSON). Il fatto che PATCH sia un aggiornamento parziale, puoi avere diverse permutazioni dei dati inviati - non è logico avere un serializzatore diverso per permutazione. –
Cosa intendi per "permutazione"? Gli oggetti non sono ordinati, quindi il loro contenuto non può essere permutato. Ad ogni modo, quello che vuoi qui è aggiungere o rimuovere un campo. Quindi non è lo stesso formato. – spectras