Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在正确输入和保存数据后,序列化程序会导致KeyError_Django_Api_Django Rest Framework - Fatal编程技术网

Django 在正确输入和保存数据后,序列化程序会导致KeyError

Django 在正确输入和保存数据后,序列化程序会导致KeyError,django,api,django-rest-framework,Django,Api,Django Rest Framework,我正在创建一个API端点,通过它的API工作并保存数据。它可以工作,但我担心的是它会抛出一个KeyError,如下所示。我不确定这是否是我的代码的问题。非常感谢你的帮助 数据: 序列化程序: class JobPostSerializer(serializers.ModelSerializer): career_level = PrimaryKeyRelatedField(allow_null=True, queryset=CareerLevel.objects.all(), requi

我正在创建一个API端点,通过它的API工作并保存数据。它可以工作,但我担心的是它会抛出一个KeyError,如下所示。我不确定这是否是我的代码的问题。非常感谢你的帮助

数据:

序列化程序:

class JobPostSerializer(serializers.ModelSerializer):
    career_level = PrimaryKeyRelatedField(allow_null=True, queryset=CareerLevel.objects.all(), required=False)
    title = CharField(allow_blank=True, allow_null=True, max_length=240, required=False)
型号:

class JobPost(models.Model):
    career_level = models.ForeignKey(CareerLevel, related_name='jobpost_career', blank=True, null=True)
    title = models.CharField(max_length=240, blank=True, null=True)
    created_at = models.DateTimeField(db_index=True, auto_now_add=True)

    def __str__(self):
        return self.title

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['-created_at']
错误消息:

Internal Server Error: /api/v1/posts/
Traceback (most recent call last):
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/viewsets.py", line 87, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/views.py", line 466, in dispatch
    response = self.handle_exception(exc)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/views.py", line 463, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/mixins.py", line 22, in create
    headers = self.get_success_headers(serializer.data)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 503, in data
    ret = super(Serializer, self).data
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 241, in data
    self._data = self.to_representation(self.validated_data)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 463, in to_representation
    attribute = field.get_attribute(instance)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/relations.py", line 157, in get_attribute
    return get_attribute(instance, self.source_attrs)
  File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/fields.py", line 78, in get_attribute
    instance = instance[attr]
KeyError: u'career_level'

您的序列化程序定义毫无意义

JobPostSerializer(data={'title': u'abc', 'career_level': 1}):
它应该是:

class JobPostSerializer(serializers.ModelSerializer):
您的这行代码与您希望实例化序列化程序时的代码更为相似。例如,当您想检查输入是否有效时

job_serializer = JobPostSerializer(data={'title': u'abc', 'career_level': 1})
job_serializer.is_valid()

你也可以发布models.py吗?我对REST框架不太熟悉,但keyrerror通常意味着你试图引用一个不存在的字典中的键。这也是我理解keyrerror的方式,但是我似乎找不到错误的来源。嘿,这是我的错,但是我的serializers.py实际上看起来就像你在这里概述的那样。我已经打印出实例化的序列化程序并粘贴到这里。(刚刚编辑)还检查了我的shell中的
job\u serializer.is\u valid()。您使用的是哪个版本的DRF?如果您使用的是最新的(3),我不确定它是否应该与Python2.7一起使用。我使用的是Django==1.9 djangorestframework==3.3.3和Python2.7
job_serializer = JobPostSerializer(data={'title': u'abc', 'career_level': 1})
job_serializer.is_valid()