Я хочу сериализовать модель, но хочу включить дополнительное поле, которое требует выполнения некоторых операций поиска в базе данных для экземпляра модели, который необходимо сериализовать:
class FooSerializer(serializers.ModelSerializer):
my_field = ... # result of some database queries on the input Foo object
class Meta:
model = Foo
fields = ('id', 'name', 'myfield')
Как правильно это сделать? Я вижу, что вы можете передать в дополнительный «контекст» сериализатору, является ли правильным ответом передать дополнительное поле в контекстном словаре? При таком подходе логика получения нужного мне поля не будет автономной с определением сериализатора, что является идеальным, так как потребуется каждому сериализованному экземпляру my_field
. В другом месте в документации по сериализаторам DRF говорится, что «дополнительные поля могут соответствовать любому свойству или вызываться в модели». О дополнительных полях я говорю? Должен ли я определить функцию в Foo
определении модели, которая возвращает my_field
значение, и в сериализаторе я подключаю my_field к этому вызываемому объекту? На что это похоже?
Заранее спасибо, с удовольствием уточню вопрос при необходимости.