Возвращение строкового представления атрибута в другой модели Django
Итак, у меня есть две модели, и если я попробую метод get на postman для продуктов, я могу увидеть только категорию продукта по ID, а я хочу видеть ее в виде текста. Есть идеи, как это сделать? Я пытался использовать def save и затем установить self.name в Product_category.name и затем сохранить его, но все равно получаю то же самое.Спасибо заранее.
Для уточнения: что я получаю в postman:
name: ball,
default_price: 100,
product_cateogry: 1
что я хочу получить:
name:ball,
default_price:100,
product_category: sports
Модель
class Product_category(models.Model):
name = models.CharField(max_length=50, null=True)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=50)
default_price = models.FloatField(max_length=10)
product_category = models.ManyToManyField(Product_category, related_name="products")
Serializer:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ['id', 'name', 'default_price', 'description', 'deleted','product_category']
Вы можете реализовать __str__
для соединения названий категорий вместе с:
class Product(models.Model):
# …
def __str__(self):
la = f'name:{self.name},'
lb = f'default price: {self.default_price}'
lc = ', '.join(str(s) for s in self.product_category.all())
return f'{la}\n{lb}\n{lc}'
Для сериализатора мы можем работать с StringRelatedField
[DRF-doc]:
from rest_framework import serializers
class ProductSerializer(serializers.ModelSerializer):
product_category = serializers.StringRelatedField(many=True)
class Meta:
model = Product
fields = ['id', 'name', 'default_price', 'description', 'deleted', 'product_category']
или вы можете использовать сериализатор и в направлении чтения, и в направлении записи с помощью SlugRelatedField
:
from rest_framework import serializers
class ProductSerializer(serializers.ModelSerializer):
product_category = serializers.SlugRelatedField(
slug_field='name',
many=True,
queryset=Product_category.objects.all()
)
class Meta:
model = Product
fields = ['id', 'name', 'default_price', 'description', 'deleted', 'product_category']