Как изменить выдачу серилизатора Django Rest Framework?
Всем привет!
class Cost(models.Model):
category = models.ForeignKey( ... )
class CostSerializer(serializers.ModelSerializer):
class Meta:
model = Cost
fields = '__all__'
Серилизатор для поля ForeignKey возвращает поле 'id'. Подскажите, пожалуйста, как модифицировать выдачу для того, чтобы возвращалось значение поля 'title'?
class CostSerializer(serializers.ModelSerializer):
category = serializers.CharField(source="category.title")
class Meta:
model = Cost
fields = '__all__'
Спасибо. Непосредственно так, как Вы написали не заработало. Была ошибка, что category is NoneType object and has no attribute 'title'. Но заработало вот так:
То есть просто переименование поля. Не знаю почему, но это работает. Мне не нравится, конечно, такой вариант, но пока оставлю. Буду искать, в чем проблема. Ещё раз спасибо за помощь ;)
Егор Вавилов, у вас по всей видимости ForeignKey с null=True (у вас этот момент опущен), поэтому такая ошибка и возникает.
Как вариант - можно еще так сделать, если вам только получать данные надо:
class CostSerializer(serializers.ModelSerializer):
category = serializers.SerializerMethodField()
class Meta:
model = Cost
fields = '__all__'
def get_category(self, obj):
return obj.category.title if obj.category else ''