2022/11/10
DjangoRESTFrameworkDRFでモデルのpropertyメソッドをシリアライズする
Django REST Framework でモデルのpropertyメソッドをシリアライズする方法についてです。
こんなpropertyメソッドを持つモデルがあったとします。
models.py
class Hoge(models.Model):
@property
def get_absolute_url(self):
return reverse("detail", kwargs={"pk": self.pk})
この時、get_absolute_urlの値は以下のようにReadOnlyFieldとsource
パラメーターを使ってシリアライズできます。(メソッド名とシリアライザのフィールド名が同じ場合はsourceは不要です。)
serializers.py
url = serializers.ReadOnlyField(source="get_absolute_url")
SerializerMethodField
を使うこともできますが、プロパティメソッドの値をそのまま使うだけならsourceを使ったほうが簡潔に書けます。
serializers.py
url = serializers.SerializerMethodField()
def get_url(self, obj):
return obj.get_absolute_url
https://www.django-rest-framework.org/api-guide/fields/#source