Ansatz-1 Mit einem SerializerMethodField
:
Sie ein SerializerMethodField
in Ihrem Serializer verwenden kann den get_absolute_url()
Wert auf die serialisierte Darstellung des Objekts hinzuzufügen.
Gemäß der SerializerMethodField
docs:
Dies ist ein Nur-Lese-Feld. Es erhält seinen Wert, indem es eine Methode auf die Serializer-Klasse aufruft, an die es angehängt ist. Es kann verwendet werden, um eine beliebige Art von Daten zu der serialisierten Darstellung Ihres Objekts hinzuzufügen.
Wir werden ein Verfahren get_my_abslute_url()
für das my_absolute_url
Feld in unserem Serializer definieren, die die absolute URL des Objekts in der serialisierte Darstellung hinzufügen.
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
Ansatz-2 Mit URLField
mit source
Argument:
Sie auch eine URLField
und übergeben Sie die Methode get_absolute_url
, um es verwenden können. Dies ruft die Methode get_absolute_url
auf und gibt diesen Wert in der serialisierten Darstellung zurück.
Von DRF docs auf source
argument:
Der Name des Attributs, das verwendet wird, um das Feld zu füllen. Mai ein Verfahren sein, das eine self argument
dauert nur, wie URLField('get_absolute_url')
oder punktierten Notation kann Attribute wie EmailField(source='user.email')
zu durchqueren.
class MyModelSerializer(serializers.ModelSerializer):
my_absolute_url = serializers.URLField(source='get_absolute_url', read_only=True)
Ich würde vorschlagen, den zweiten Ansatz als DRF mit hat dies in seiner docs explizit verwendet.
Ich fand eine Menge der Antwort in diesem [relevanten Beitrag] (http://stackoverflow.com/questions/18396547/django-rest-framework-adding-additional-field-to-modelserializer) – SimonMorris