Поле свойства не отображается в сериализаторе django
У меня есть свойство внутри модели Django, я должен показать его в сериализаторе. Я поместил поле в сериализатор, но оно не появляется в ответе.
class Example(models.Model):
field_1 = models.ForeignKey(
Modelabc, on_delete=models.CASCADE, null=True, related_name="abc"
)
field_2 = models.ForeignKey(
Modelxyz,
on_delete=models.CASCADE,
null=True,
related_name="xyz",
)
name = models.CharField(max_length=25, blank=True)
@property
def fullname(self):
if self.name is not None:
return "%s%s%s" % (self.field_1.name, self.field_2.name, self.name)
return "%s%s" % (self.field_1.name, self.field_2.name)
Сериализатор выглядит следующим образом:
class ExampleSerializer(serializers.ModelSerializer):
fullname = serializers.ReadonlyField()
class Meta:
model = OnlineClass
fields = [
"id",
"fullname",]
Когда я вызываю API get для этого, полное имя не отображается в ответе api. В чем проблема?
@атрибуты свойств не включаются в поля Django Serializer, так как отображаются только поля Django модели. Обычно я использую следующее обходное решение для этого.
- Создайте поле SerializerMethodField.
- Верните объект.свойство из метода.
Итак, ваш класс Serializer будет выглядеть так:
class ExampleSerializer(serializers.ModelSerializer):
fullname = serializers.SerializerMethodField()
class Meta:
model = OnlineClass
fields = [
"id",
"fullname",
]
def get_fullname(self, object):
return object.fullname
Я думаю, что в классе ExampleSerializer модель должна быть Example, а не OnlineClass, а поля должны содержать все поля внутри модели.
Используйте поле метода сериализатора и верните свойство obj.property в ответ.