ModelSerializer с использованием свойства модели
Я пытаюсь сериализовать модель, содержащую поле свойств, которое я также хочу сериализовать.
models.py:
class MyModel(models.Model):
name = models.CharField(max_length=100)
slug = models.AutoSlugField(populate_from='name')
@property
def ext_link(self):
return "/".join([settings.EXT_BASE_URL, self.slug])
serializers.py:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('name', 'ext_link')
При попытке перейти к связанному URL-адресу я получаю исключение serializer (KeyError) в свойстве ext_link
.
Как я могу сериализовать свойство ext_link
?
Ответы
Ответ 1
Поскольку это не поле модели, оно должно быть явно добавлено к классу сериализатора
class MyModelSerializer(serializers.ModelSerializer):
ext_link = serializers.Field()
class Meta:
model = MyModel
fields = ('name', 'ext_link')
Изменить: В REST framework 3 добавление в fields
будет просто работать - не нужно явно добавлять поле.
Ответ 2
как комментирует @Robert Townley
, эта работа с версией 3.8.2
:
class MyModelSerializer(serializers.ModelSerializer):
ext_link = serializers.ReadOnlyField()
class Meta:
model = MyModel
fields = "__all__"