#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')`