Approccio-1 Utilizzando un SerializerMethodField
:
è possibile utilizzare un SerializerMethodField
nel vostro serializzatore per aggiungere il valore get_absolute_url()
alla rappresentazione serializzata dell'oggetto.
Come per la SerializerMethodField
docs:
Questo è un campo di sola lettura. Ottiene il suo valore chiamando un metodo su la classe serializzatore a cui è collegata. Può essere utilizzato per aggiungere qualsiasi tipo di dati alla rappresentazione serializzata del proprio oggetto.
Noi definire un metodo get_my_abslute_url()
per il campo my_absolute_url
nel nostro serializzatore che aggiungerà l'URL assoluto dell'oggetto alla rappresentazione serializzata.
class MyModelSerializer(serializers.ModelSerializer):
my_absolute_url = serializers.SerializerMethodField() # define a SerializerMethodField
def get_my_absolute_url(self, obj):
return obj.get_absolute_url() # return the absolute url of the object
Approccio-2 Uso URLField
con source
argomento:
È possibile anche utilizzare un URLField
e passare il metodo di get_absolute_url
ad esso. Questo chiamerà il metodo get_absolute_url
e restituirà quel valore nella rappresentazione serializzata.
Da docs DRF su source
argument:
Il nome dell'attributo che verrà utilizzato per compilare il campo. Può essere un metodo che richiede solo un self argument
, come URLField('get_absolute_url')
, oppure può utilizzare la notazione punteggiata per attraversare attributi, come EmailField(source='user.email')
.
class MyModelSerializer(serializers.ModelSerializer):
my_absolute_url = serializers.URLField(source='get_absolute_url', read_only=True)
Io suggerirei di usare il secondo metodo come DRF ha utilizzato esplicitamente nei suoi documenti.
fonte
2015-10-08 14:12:24
Ho trovato molte risposte in questo [post pertinente] (http://stackoverflow.com/questions/18396547/django-rest-framework-adding-additional-field-to-modelserializer) – SimonMorris