2016-12-06 6 views
2

APIを使用してデータを処理して保存するAPIエンドポイントを作成しています。それは動作しますが、私の懸念は、以下に示すようにKeyErrorがスローされることです。これが私のコードの問題であるかどうかはわかりません。あなたの助けは非常に高く評価されています。正しいデータの入力と保存の後、シリアライザでKeyErrorが発生する

データ:

data = {'title': u'abc', 'career_level': 1} 

シリアライザ:

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' 
+0

models.pyも投稿できますか? –

+0

私はRESTフレームワークに精通していませんが、KeyErrorは通常、存在しない辞書のキーを参照しようとしていることを意味します。 –

+0

これは私がKeyErrorも理解する方法ですが、どこからエラーが発生しているのかはわかりません。 –

答えて

0

シリアライザ定義が意味をなさない。

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() 
+0

ねえ、それは私の悪いですが、私のserializers.pyはあなたがここで概説したように見えます。インスタンス化されたシリアライザを印刷してここに貼り付けました。 (ちょうどそれを編集しました)また、私のシェルで 'job_serializer.is_valid()'をチェックして、Trueを返します... –

+0

Hm、それは奇妙です。どのDRFのバージョンを使用していますか?最新の(3)を使用している場合、Python 2.7で動作するはずです。 – lucasnadalutti

+0

私はDjango == 1.9を使用しています djangorestframework == 3.3.3 とpython 2.7 –

関連する問題