Django REST框架IntegerField max_length问题

时间:2014-12-23 06:59:25

标签: django django-models django-rest-framework

我得到一个" __init__()得到了一个意想不到的关键字参数' max_length'"我的带有max_length的IntegerField模型字段的错误。堆栈跟踪如下:

Environment:


Request Method: GET
Request URL: http://localhost:8000/api/jmc/foundation/

Django Version: 1.7.1
Python Version: 2.7.8
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'dajaxice',
 'dajax',
 'rest_framework',
 'core',
 'analytics',
 'api')
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')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py" in wrapped_view
  57.         return view_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in dispatch
  406.             response = self.handle_exception(exc)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in dispatch
  403.             response = handler(request, *args, **kwargs)
File "/home/dev/Documents/Program Codes/Python/Django/Hera/api/views.py" in get
  17.         return Response(serializer.data)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/serializers.py" in data
  547.         ret = super(ListSerializer, self).data
File "/usr/local/lib/python2.7/dist-packages/rest_framework/serializers.py" in data
  174.                 self._data = self.to_representation(self.instance)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/serializers.py" in to_representation
  500.             self.child.to_representation(item) for item in iterable
File "/usr/local/lib/python2.7/dist-packages/rest_framework/serializers.py" in to_representation
  382.         fields = [field for field in self.fields.values() if not field.write_only]
File "/usr/local/lib/python2.7/dist-packages/rest_framework/serializers.py" in fields
  245.             for key, value in self.get_fields().items():
File "/usr/local/lib/python2.7/dist-packages/rest_framework/serializers.py" in get_fields
  911.             ret[field_name] = field_cls(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/rest_framework/fields.py" in __init__
  597.         super(IntegerField, self).__init__(**kwargs)

Exception Type: TypeError at /api/jmc/foundation/
Exception Value: __init__() got an unexpected keyword argument 'max_length'

3 个答案:

答案 0 :(得分:3)

您可能希望将MaxValueValidatorIntegerField一起使用,而不是max_length

from django.db import models
from django.core.validators import MaxValueValidator

class MyModel(models.Model):
    number = models.IntegerField(validators=[MaxValueValidator(100)])

答案 1 :(得分:1)

看起来Django中的IntegerField没有max_length选项。我们没有得到任何错误的原因是因为Django抑制它和Django REST框架'没有按'吨。只需删除max_length选项即可再次使用。

答案 2 :(得分:1)

与流行的信念和常识相反,Django确实支持max_length以及任何其他领域的IntegerField论证。您在此处看到的错误是a known issue,其中Django REST Framework目前没有修复。

在序列化程序中修复此问题的最简单方法(直到在DRF中完成修复)是在没有max_length参数的情况下重新定义序列化程序上的字段。

class MySerializer(serializers.ModelSerializer):
    int_field = serializers.IntegerField()