Django Rest Framework | Как создать новый продукт с именем категории, а не ID

У меня есть две модели, созданные в Django. Я пытаюсь отправить post запрос из react frontend, используя вызов axios API.

Мой react работает нормально, и я могу публиковать запрос, используя id категории, но не название категории (либо жестко заданное, либо из выпадающего списка)

Я попробовал использовать Postman, я получил тот же результат.

class Category(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(unique=True, null=True, blank=True)
    
    def save(self,*args, **kwargs):
        self.slug = slugify(self.name)
        super(Category, self).save(*args, **kwargs)

    def __str__(self):
        return self.name


class Product(models.Model):
    upc = models.CharField(max_length=30)
    name = models.CharField(max_length=100)
    description = models.TextField(max_length=255)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
    quantity = models.IntegerField()
    price = models.IntegerField()

    def __str__(self):
        return self.name

views.py

from .models import Product
from .serializers import ProductSerializers
from rest_framework import generics


class ProductList(generics.ListCreateAPIView):
    serializer_class = ProductSerializers

    def get_queryset(self):
        queryset = Product.objects.all()

        return queryset

class ProductDetail(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = ProductSerializers
    queryset = Product.objects.all()

Serializers.py

from .models import Product, Category
from rest_framework import serializers


class CategorySerializers(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields="__all__"

class ProductSerializers(serializers.ModelSerializer):
    category_name = serializers.SerializerMethodField('get_category_name')
    
    def get_category_name(self, obj):
        if obj.category_id:
            return obj.category.name

    class Meta:
        model = Product
        fields = '__all__'

Я отправляю пост-запрос из react axios. axios.post(productListURL, data)

Как отправить запрос на почту с названием категории:

name:"Coca Cola" ,
category:"Beverage"

Вместо

name: "Coca Cola",
category: 1

Используйте это в качестве сериализатора продукта

class ProductSerializers(serializers.ModelSerializer):
    category = serializers.SlugRelatedField(
        queryset=Category.objects.all(), slug_field="name"
    )
    class Meta:
        model = Product
        fields =['upc','name','description','category,'quantity','price']
  
Вернуться на верх