Django Rest Framework, Как создать или обновить объект, который имеет вложенный сериализатор в качестве одного из своих полей

У меня есть две модели Product и Variant следующим образом

models.py

class Product(models.Model):
    GENDER = [
        ('M', 'male'),
        ('F', 'female'),
        ('U', 'unisex'),
    ]
    store = models.ForeignKey(
        Store, on_delete=models.CASCADE, related_name='products')
    name = models.CharField(max_length=80)
    slug = models.SlugField(max_length=200, unique=True, blank=True, null=True)
    description = models.TextField()
    brand = models.CharField(max_length=200, blank=True, null=True)
    model = models.CharField(max_length=200, blank=True, null=True)
    gender = models.CharField(max_length=20, choices=GENDER)
    image_1 = models.URLField()
    image_2 = models.URLField()
    category = models.ForeignKey(
        'Category', related_name="products", on_delete=models.CASCADE, null=True, blank=True)
    return_policy = models.IntegerField(null=True, blank=True)
    in_warehouse = models.BooleanField(default=False)
    is_approved = models.BooleanField(default=False)
    is_rejected = models.BooleanField(default=False)
    is_disabled = models.BooleanField(default=False)
    is_deleted = models.BooleanField(default=True)
    score = models.IntegerField(default=0)
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return self.name



class Variant(models.Model):
    
COLORS = [
        ('black', 'Black'),
        ('grey', 'Grey'),
        ('white', 'White'),
        ('blue', 'Blue'),
        ('green', 'Green'),
        ('yellow', 'Yellow'),
        ('orange', 'Orange'),
        ('red', 'Red'),
        ('purple', 'Purple'),
        ('gold', 'Gold'),
        ('silver', 'Silver'),
        ('brown', 'Brown'),
        ('pink', 'Pink'),
        ('colorless', 'Colorless'),
        ('multi-colored', 'Multi Colored'),
    ]
    SIZES = [
        ('xxs', 'XXS'),
        ('xs', 'XS'),
        ('s', 'S'),
        ('m', 'M'),
        ('l', 'L'),
        ('xl', 'XL'),
        ('xxl', 'XXL'),
        ('xxxl', 'XXXL')
    ]
    product = models.ForeignKey(
        Product, on_delete=models.CASCADE, related_name="variants", null=True, blank=True)
    is_default = models.BooleanField(default=False)
    price = models.FloatField()
    old_price = models.FloatField(blank=True, null=True)
    quantity = models.IntegerField()
    size = models.CharField(
        max_length=20, choices=SIZES, null=True, blank=True)
    shoe_size = models.IntegerField(null=True, blank=True)
    color = models.CharField(max_length=20, choices=COLORS)
    image = models.URLField()
    is_deleted = models.BooleanField(default=True)
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return self.product.name + " variant"

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

serializer.py

Данные, которые я пытался ПОСТИТЬ, были

{
    "name": "first product",
    "category": "tops",
    "brand": "first",
    "model": "test",
    "description": "someone is the ehd  kdvk kja avm elgm klrm gkrlng lkrgn rgn ognr bonr btklbn lbknb klnb rkngrkla rkgnrkgrng",
    "image_1": File,
    "image_2": File,
    "gender": "U",
    "variants": [
        {
            "price": "23000",
            "quantity": "4",
            "image": File,
            "size": "m",
            "shoe_size": "4",
            "color": "black",
            "is_default": true
        },
        {
            "price": "44",
            "quantity": "44",
            "image": File,
            "size": "m",
            "shoe_size": "44",
            "color": "black",
            "is_default": false
        },
        {
            "price": "22222",
            "quantity": "22",
            "image": File,
            "size": "m",
            "shoe_size": "22",
            "color": "black",
            "is_default": false
        }
    ]
}

Но он бросил мне 415 Unsupported Media Type

{"detail":"Unsupported media type \"application/json;charset=UTF-8\" in request."}

Итак, как мне реализовать эту логику с помощью вложенных сериализаторов?

Я решил проблему, мне просто нужно было добавить заголовок headers: { "Content-Type": "multipart/form-data" },

Вернуться на верх