Изменение поля модели django на сериализаторе

у меня есть определение модели

Class Book():
          name = textfield()
          edition = textfield() 

я хочу, чтобы название книги было "название издания", если в объекте book есть данные об издании. в противном случае я хочу вернуть только книгу. как я могу этого добиться? могу ли я использовать serializermethod в сериализаторе book как

class BookSerializer(

):
    name = serializers.SerializerMethodField()
    def get_name(self,book):
        if book.edition:
            return f"{book.edition}{book.name}"
        return book.name 
<<<Я не хочу сохранять номер издания вместе с названием. Я просто хочу, чтобы сериализатор возвращал поле name как "название издания", если есть издание, иначе только название, но не сохранял его в модели.

Возможно, это не самый лучший способ, но именно так я это делал.
Переопределяя функцию to_representation, вы можете изменить только сериализованный результат.

как так


class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('name', 'edition')
    
    def to_representation(self, instance:Book):
        out = super().to_representation(instance)
        # change the name to <name edition>
        out['name'] = f"{instance.edition if instance.edition else ""} {instance.name}"
        # remove the original 'edition' so it doesnt show in output
        out.pop('edition')

Таким образом, при сериализации bool obj вы получите только поле 'name', содержащее "{edition} {name}", но вы все равно сможете использовать этот сериализатор для десериализации и создания Book obj позже.

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