首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django RESTFramework3.0未实现to_representation

Django RESTFramework3.0未实现to_representation
EN

Stack Overflow用户
提问于 2014-12-13 18:42:20
回答 1查看 9.5K关注 0票数 10

我正在使用Django 1.7.1和Python2.7从Django Rest Framework2.4升级到3.0.1,无法通过以下错误:

代码语言:javascript
复制
File "/Users/bjacobel/.virtualenvs/hey/lib/python2.7/site-packages/rest_framework/fields.py", line 375, in to_representation
    raise NotImplementedError('to_representation() must be implemented.')

我所使用的代码在2.4以下工作得很好,我很难找到任何关于我所使用的DRF类中更改的文档。除了我的一个端点(为django.contrib.auth.models.User提供CRUD的端点)之外,我还得到了错误信息。

serializers.py

代码语言:javascript
复制
from django.contrib.auth.models import User
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name', 'email', 'username')

views.py

代码语言:javascript
复制
from django.contrib.auth.models import User
from hey.apps.api import serializers
from rest_framework import viewsets, permissions, filters

class User(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = serializers.UserSerializer
    permission_classes = (permissions.IsAuthenticated,)
    filter_backends = (filters.OrderingFilter,)

urls.py

代码语言:javascript
复制
from django.conf.urls import patterns, url, include
from hey.apps.api import views
from rest_framework.routers import SimpleRouter

router = SimpleRouter()


router.register(r'user', views.User)

urlpatterns = patterns('',
    url(r'^', include(router.urls)),
)

pagination.py

代码语言:javascript
复制
from rest_framework import pagination
from rest_framework import serializers

class LinksSerializer(serializers.Serializer):
    next = pagination.NextPageField(source='*')
    prev = pagination.PreviousPageField(source='*')

class CustomPaginationSerializer(pagination.BasePaginationSerializer):
    links = LinksSerializer(source='*')  # Takes the page object as the source
    total_results = serializers.Field(source='paginator.count')

    results_field = 'objects'

settings.py

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_SERIALIZER_CLASS': 'hey.apps.api.pagination.CustomPaginationSerializer',
    'PAGINATE_BY': 20,                  # Default to 20
    'PAGINATE_BY_PARAM': 'limit',       # Allow client to override, using `?limit=xxx`.
    'MAX_PAGINATE_BY': 100,             # Maximum limit allowed when using `?limit=xxx`.
    'TEST_REQUEST_DEFAULT_FORMAT': 'json',
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-13 19:52:36

问题在您的分页序列化程序中,因为您正在使用serializers.Field,它现在是Django REST Framework3.0中的serializers.ReadOnlyField。这是一个微妙的变化,虽然它是在发布公告中调用的,对于那些覆盖分页序列化程序的人来说,这是最明显的。

更新的默认分页序列化程序ReadOnlyField用于count字段。您应该能够通过交换字段来修复序列化程序。

代码语言:javascript
复制
class CustomPaginationSerializer(pagination.BasePaginationSerializer):
    links = LinksSerializer(source='*')  # Takes the page object as the source
    total_results = serializers.ReadOnlyField(source='paginator.count')

    results_field = 'objects'
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27462330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档