Поле свойства не отображается в сериализаторе 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 модели. Обычно я использую следующее обходное решение для этого.

  1. Создайте поле SerializerMethodField.
  2. Верните объект.свойство из метода.

Итак, ваш класс 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 в ответ.

Вернуться на верх