Ошибка drf возникла, когда я попытался запросить POST : Got a `TypeError` when calling `Item.objects.create()`.

Я попытался создать экземпляр Item. но каждый раз, когда я пытаюсь запросить POST, возникает ошибка типа как эта. Что мне делать? Пожалуйста, проверьте мою проблему.

Получили ошибку TypeError при вызове Item.objects.create(). Это может быть связано с тем, что в классе сериализатора есть поле, доступное для записи, которое не является допустимым аргументом для Item.objects.create(). Вам может понадобиться сделать поле доступным только для чтения или переопределить метод ItemSerializer.create(), чтобы правильно обработать это.

TypeError: Item() получил неожиданный аргумент ключевого слова 'category'

models.py

from django.db import models
from django.contrib.auth import get_user_model

User = get_user_model()


class Category(models.Model):
    NATIONAL_CHOICES = (
        ('outer', '아우터'),
        ('dress', '원피스'),
        ('top', '상의'),
        ('pants', '바지'),
        ('skirt', '스커트'),
        ('shoes', '신발'),
        ('accessory', '악세사리'),
    )
    big_category = models.CharField(max_length=20, choices=NATIONAL_CHOICES)
    small_category = models.CharField(max_length=20)


class Item(models.Model):
    user_id = models.ForeignKey(User, related_name='item_sets', on_delete=models.CASCADE)
    category_id = models.ForeignKey(Category, related_name='item_sets', on_delete=models.DO_NOTHING)
    description = models.TextField()
    feature = models.TextField()
    product_defect = models.TextField()
    size = models.CharField(max_length=6)
    wear_count = models.IntegerField()
    price = models.IntegerField()


class Location(models.Model):
    city = models.CharField(max_length=10)
    gu = models.CharField(max_length=10)
    dong = models.CharField(max_length=10)


class LocationSet(models.Model):
    item_id = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='location_sets')
    location_id = models.ForeignKey(Location, on_delete=models.CASCADE, related_name='location_sets')


class Photo(models.Model):
    item_id = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='photo_sets')
    photo = models.ImageField(upload_to='item_post', blank=True, null=True)


class StylePhoto(models.Model):
    item_id = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='style_photo_sets')
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name='style_photo_sets')
    photo = models.ImageField(upload_to='item_post', blank=True, null=True)
serializers.py

from rest_framework import serializers
from .models import *

User = get_user_model()


class PhotoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Photo
        fields = ['photo']


class StylePhotoSerializer(serializers.ModelSerializer):
    class Meta:
        model = StylePhoto
        fields = ['photo']


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['big_category', 'small_category']


class ItemSerializer(serializers.ModelSerializer):
    photos = PhotoSerializer()
    style_photos = StylePhotoSerializer()
    category = CategorySerializer()

    class Meta:
        model = Item
        fields = [
            'description',
            'feature',
            'product_defect',
            'size',
            'wear_count',
            'price',
            'category',
            'photos',
            'style_photos',
        ]

views.py

from rest_framework import generics
from .serializers import *
from django.contrib.auth import get_user_model

User = get_user_model()


class ItemListAPIView(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = ItemSerializer


class ItemDetailAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset = User.objects.all()
    serializer_class = ItemSerializer
urls.py

from django.urls import path
from . import views


urlpatterns = [
    path('post/', views.ItemListAPIView.as_view()),
    path('post/<int:pk>/', views.ItemDetailAPIView.as_view()),
]

--редактировать... enter image description here

Когда вы хотите создать свой элемент, что вы отправили? Идентификатор или объект? Категория является внешним ключом в вашей модели Item, поэтому вам нужно отправить id для соответствия

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