2015-05-12 5 views
1

Я создаю RESTful API с DjangoRestFrameowork и наткнулся на ошибку при попытке использовать 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

Смежные вопросы