在Django代码中查找POST的“错误类型错误”

时间:2016-04-25 21:23:10

标签: django

我试图发现在我的Django代码中抛出了错误的类型错误消息:

{"_body":"{\"keywords\":[\"Incorrect type. Expected pk value, received str.\"]}","status":400,"statusText":"Ok","headers":{"Content-Type":["application/json;q=0.8"]},"type":2,"url":"http://127.0.0.1:8000/api/items/"}

我在视图的perform_create中设置了一个断点来处理POST但是从未执行过。

任何人都知道在我的代码中我应该设置一个断点来看看发生了什么?

我的观点如下:

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all().order_by('-date_added')
    serializer_class = ItemSerializer


    def list(self, request, *args, **kwargs):

        this_user = self.request.query_params.get('user', None)
        count_of_views = Seen.objects.filter(who_saw=this_user).count()

        custom_data = {
            'results': ItemSerializer(self.get_queryset(), many=True).data  
        }
        custom_data.update({
            'views':  count_of_views
        })
        return Response(custom_data)

    def perform_create(self, serializer):
        creator = User.objects.get(pk=self.request.data['owner_id'])
        the_keywords = self.request.data['keywords'].split
        serializer.save(owner=creator)
        #serializer.save(keywords=the_keywords)

编辑:序列化器是:

class ItemSerializer(serializers.ModelSerializer):
    username = serializers.SerializerMethodField()

    def get_username(self, obj):
        value = str(obj.owner)
        return value

    def get_keywords(self, obj):
        value = str(obj.keywords)
        return value

    class Meta:
        model = Item
        fields = ('id', 'url', 'item_type', 'title', 'keywords')

编辑项目模型是:

class Item(models.Model):

    owner           = models.ForeignKey(User, on_delete=models.CASCADE)     
    title           = models.CharField(max_length=60, default='')           
    url             = models.CharField(max_length=250, default='', unique=True)                                                                 
    keywords        = models.ManyToManyField(Keyword, related_name='keywords')
                                                                            

关键字模型是:

class Keyword(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return format(self.name)

0 个答案:

没有答案