【问题标题】:Key error with Django Rest FrameworkDjango Rest Framework 的关键错误
【发布时间】:2015-05-12 20:45:41
【问题描述】:

我正在使用 DjangoRestFrameowork 构建一个 RESTful API,并在我的模型中尝试使用 choices 时遇到错误。访问 api 端点时,我收到错误 KeyError at /jobs/ u'job_type'。我的模型有

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'

【问题讨论】:

  • 什么时候发生?当你 POST 或 GET 时?
  • 当我 GET 时,还没有尝试过 POST
  • 您的某个对象的job_type 的值为“job_type”,这不是一个有效的选择。有一张关于它的 DRF 票仍然开放。
  • 所以你的意思是这可能是一个错误?有解决办法吗?
  • @bencunningham 你可以通过在('job_type', 'BAD DATA'),JOB_CHOICES 中添加另一个元素来测试Kevin 的理论,看看它是否出现,并寻找那个“BAD DATA”来找到你的不良记录。

标签: django django-rest-framework serialization


【解决方案1】:

Meta 类应该是序列化器的内部类,而不是单独的类。试试这个:

class JobSerializer(serializers.ModelSerializer):

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

【讨论】:

  • 对不起,这是格式,Meta 类是内部类
猜你喜欢
  • 2019-07-27
  • 2018-08-01
  • 2016-09-09
  • 2019-10-12
  • 1970-01-01
  • 2019-11-22
  • 2015-02-13
  • 2016-02-23
  • 1970-01-01
相关资源
最近更新 更多