Django 在正确输入和保存数据后,序列化程序会导致KeyError
我正在创建一个API端点,通过它的API工作并保存数据。它可以工作,但我担心的是它会抛出一个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
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()