drf error arise when i tryed to request POST : Got a `TypeError` when calling `Item.objects.create()`

Viewed 36

I tried to create Item instance. but every time I tried to request POST, arise type error like this. What should I do? please please check my problem.

Got a TypeError when calling Item.objects.create(). This may be because you have a writable field on the serializer class that is not a valid argument to Item.objects.create(). You may need to make the field read-only, or override the ItemSerializer.create() method to handle this correctly.

TypeError: Item() got an unexpected keyword argument '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()),
]

--edit-- enter image description here

0 Answers
Related