Django rest framework serialized добавляет автоматически генерируемое поле при получении данных

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

class SaleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sale
        fields = '__all__'

Я хочу, чтобы сериализация имела два дополнительных поля, которые динамически генерируются, одно называется username, которое имеет строковое имя пользователя obejct, а другое shop name, которое имеет название объекта shop

her - это модель продажи, которую использует сериализатор.

class Sale(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    shop = models.ForeignKey(Shop, on_delete=models.DO_NOTHING)
    reciept = models.TextField()
    date_time = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return f"reciept number {self.pk}"

Попробуйте следующее (я предположил, что ваша модель Shop имеет поле под названием name, поскольку вы не указали класс):

class SaleSerializer(serializers.ModelSerializer):
    username = serializers.SerializerMethodField()
    shop_name = serializers.SerializerMethodField()

    def get_username(self, obj):
       return obj.user.username
 
    def get_shop_name(self, obj):
       return obj.shop.name
 
    class Meta:
        model = Sale
        fields = ['user', 'shop', 'reciept', 'date_time', 'username', 'shop_name']

Предполагая, что поле name хранит имя магазина и пользователя в соответствующих моделях. Кроме упомянутого RedWheelbarrow аргумента source в поле сериализатора, есть и другой способ достижения этой цели.

class SaleSerializer(serializers.ModelSerializer):
    username = serializers.Charfield(source='user.name')
    shopname = serializers.Charfield(source='shop.name')
    class Meta:
        model = Sale
        fields = '__all__'
Вернуться на верх