Получение функции из модели и передача ее в сериализатор

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

У меня есть проект Django. У меня есть модель и сериализатор, и я пытаюсь отправить результат моей функции «increase_id» из модели в сериализатор. Что я делаю не так? Как я могу это реализовать?

 class Person(models.Model):
    age = models.PositiveIntegerField()
    first_field = models.CharField()
    second_name = models.CharField()
    
    def increase_id(self):
        own_id = self.id
        magnifier = own_id   50_000
        return magnifier
  

сериализатор:

 class PersonSerializer(serializers.ModelSerializer):
    magnifier = serializers.IntegerField(source='increase_id')
    class Meta:
        model = Person
        fields = ('id', 'first_name', 'second_name', 'age', 'magnifier')

  

Ответ №1:

Описанный выше метод будет хорошо работать при извлечении деталей, но в случае создания он выдаст сообщение об ошибке, что требуется поле увеличителя.

Вы можете использовать декоратор свойств

 class Person(models.Model):
    age = models.PositiveIntegerField()
    first_field = models.CharField()
    second_name = models.CharField()

@property
def increase_id(self):
    own_id = self.id
    magnifier = own_id   50_000
    return magnifier



class PersonSerializer(serializers.ModelSerializer):
    magnifier = serializers.SerializerMethodField(read_only=True)

    def get_magnifier(self, instance):
        return self.increase_id

    class Meta:
        model = Person
        fields = ('id', 'first_name', 'second_name', 'age', 'magnifier')`