Возвращение строкового представления атрибута в другой модели 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']
Вернуться на верх