voglio serializzare un modello, ma di includere un campo aggiuntivo che richiede facendo alcune ricerche nei database nell'istanza modello da serializzato:Django REST quadro: l'aggiunta di ulteriore campo di ModelSerializer
class FooSerializer(serializers.ModelSerializer):
my_field = ... # result of some database queries on the input Foo object
class Meta:
model = Foo
fields = ('id', 'name', 'myfield')
Qual è la modo giusto per fare questo? Vedo che you can pass in extra "context" per il serializzatore, è la risposta giusta per passare nel campo aggiuntivo in un dizionario di contesto? Con questo approccio, la logica di ottenere il campo di cui ho bisogno non sarebbe autonoma con la definizione di serializzatore, che è l'ideale poiché ogni istanza serializzata avrà bisogno di my_field
. Altrove nella documentazione dei serializzatori DRF è says "campi aggiuntivi possono corrispondere a qualsiasi proprietà o chiamabile sul modello". Sono campi extra di cosa sto parlando? Devo definire una funzione nella definizione del modello di Foo
che restituisce il valore my_field
e nel serializzatore collego my_field a tale chiamabile? Che aspetto ha?
Grazie in anticipo, felice di chiarire la domanda se necessario.
+1, Potrebbe funzionare anche per un CustomSerializer? –
è possibile aggiungere la convalida a tali campi? la mia domanda è: come accettare i valori POST personalizzati che possono essere validati e processati nel gestore post_save()? – Alp
Nota che SerializerMethodField è di sola lettura, quindi non funzionerà con POST/PUT/PATCH in arrivo. –