ошибка с сериализацией в django rest framework

Я использую django rest framework и получаю эту ошибку:

Аргумент base_name не указан и не может автоматически определить имя из набора представлений, так как у него нет атрибута .model или .queryset.

это мой код

urls.py

from django.conf.urls import patterns, include, url
from rest_framework import viewsets, routers
import views

router = routers.SimpleRouter()
router.register(r'book', views.BookViewSet.as_view())

views.py

from django.shortcuts import render_to_response
from mobileapp.models import Book
from rest_framework import generics
from mobileapp.serializers import BookSerializer


class BookViewSet(generics.ListAPIView):
    serializer_class = BookSerializer
    def get_queryset(self):
        queryset = Book.objects.filter(user=self.request.user)
        return queryset.order_by('-id')

сериализаторы.py

from mobileapp.models import Book
from rest_framework import serializers


class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('id', 'url', 'date', 'comment')

person Albert Iskhakov    schedule 24.10.2013    source источник


Ответы (2)


Вы гуглили заявление об ошибке?

https://github.com/tomchristie/django-rest-framework/issues/933

http://django-rest-framework.org/api-guide/routers.html#usage

person alko    schedule 24.10.2013
comment
Я изменил urls.py: router.register(r'^book', views.BookViewSet.as_view(), base_name='book-list'). И теперь у меня ошибка 404 - person Albert Iskhakov; 24.10.2013
comment
с каким URL? попробуйте base_name = 'book', часть '-list' добавлена ​​SimpleRouter - person alko; 24.10.2013
comment
URL: localhost: 8000/книга - person Albert Iskhakov; 24.10.2013
comment
base_name = 'book' также возвращает 404 - person Albert Iskhakov; 24.10.2013
comment
попробуйте локальный: 8000/книга/ - person alko; 24.10.2013

Я решил свою проблему. Есть код.

urls.py

from django.conf.urls import patterns, include, url
from views import BookList, BookDetail
from rest_framework.urlpatterns import format_suffix_patterns

from django.contrib import admin
admin.autodiscover()


urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^book/$',  BookList.as_view(), name='book-list'),
    url(r'^book/(?P<pk>\d+)/$', BookDetail.as_view(), name='book-detail'),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
)

urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'api'])

views.py

class BookList(generics.ListCreateAPIView):
    serializer_class = BookSerializer
    def get_queryset(self):
        queryset = Book.objects.filter(user=self.request.user)
        return queryset.order_by('-id')

class BookDetail(generics.RetrieveUpdateDestroyAPIView):
    model = Book
    serializer_class = BookSerializer
person Albert Iskhakov    schedule 25.10.2013
comment
Не очень полезный ответ для других людей - person gitaarik; 17.03.2015
comment
Для всех, кто не видит решение, взятое здесь, представление BookViewSet не является набором, поэтому вам нужно зарегистрировать URL-адрес самостоятельно, а не регистрировать его в экземпляре маршрутизатора. Маршрутизатор можно использовать только с наборами. подробнее здесь django-rest-framework.org/api-guide/routers - person Iwan1993; 23.05.2015