2015-05-12 48 views
1

我正在用DjangoRestFrameowork構建一個RESTful API,並在我的模型中嘗試使用choices時遇到錯誤。訪問api端點時,出現錯誤KeyError at /jobs/ u'job_type'。我的模型有Django Rest Framework的關鍵錯誤

JOB_CHOICES = (
    ('p', 'Paint'), 
    ('pw', 'Pressure Wash'), 
    ('h', 'Hourly'), 
) 

class Job(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    budget = models.IntegerField() 
    job_type = models.CharField(choices=JOB_CHOICES, 
           default='p', 
           max_length=100) 

和我的串行器看起來像這樣:

class JobSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Job 
     fields = ('pk', 
       'budget', 
       'created', 
       'job_type',) 

我想不通這是怎麼回事錯誤。他們在Django-Rest-Framework教程中做了與此非常類似的事情,我無法弄清楚我的不同之處。任何幫助,將不勝感激!

這是完整的錯誤:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/jobs/ 

Django Version: 1.7.1 
Python Version: 2.7.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'main', 
'rest_framework', 
'corsheaders') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'corsheaders.middleware.CorsMiddleware', 
'django.middleware.common.CommonMiddleware') 


Traceback: 
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Library/Python/2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    57.   return view_func(*args, **kwargs) 
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in view 
    69.    return self.dispatch(request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/rest_framework/views.py" in dispatch 
    452.    response = self.handle_exception(exc) 
File "/Library/Python/2.7/site-packages/rest_framework/views.py" in dispatch 
    449.    response = handler(request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/rest_framework/generics.py" in get 
    241.   return self.list(request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/rest_framework/mixins.py" in list 
    47.   return Response(serializer.data) 
File "/Library/Python/2.7/site-packages/rest_framework/serializers.py" in data 
    618.   ret = super(ListSerializer, self).data 
File "/Library/Python/2.7/site-packages/rest_framework/serializers.py" in data 
    213.     self._data = self.to_representation(self.instance) 
File "/Library/Python/2.7/site-packages/rest_framework/serializers.py" in to_representation 
    568.    self.child.to_representation(item) for item in iterable 
File "/Library/Python/2.7/site-packages/rest_framework/serializers.py" in to_representation 
    435.     ret[field.field_name] = field.to_representation(attribute) 
File "/Library/Python/2.7/site-packages/rest_framework/fields.py" in to_representation 
    1041.   return self.choice_strings_to_values[six.text_type(value)] 

Exception Type: KeyError at /jobs/ 
Exception Value: u'job_type' 
+0

它什麼時候會發生?當你POST或GET? – EsseTi

+0

當我GET時,還沒有嘗試POST – bencunningham

+0

它看起來像你的一個對象有一個'job_type'值爲「job_type」,這不是一個有效的選擇。有關於它的DRF票據仍然是開放的。 –

回答

0

的元類應該是一個內部類的串行器,而不是一個單獨的類。試試這個:

class JobSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Job 
     fields = ('pk', 
        'budget', 
        'created', 
        'job_type', 
     ) 
+0

對不起,這是格式化,Meta類是內部的 – bencunningham