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__'