2016-01-22 5 views
2

После обновления с DRF версии 3.0 до версии 3.3.3, я получаю 405 (метод не разрешен) при попытке создать модель с использованием метода POST.Django Rest Framework, возвращает 405 на POST

и я не могу уловить запрос на отладчике, чтобы выяснить, где он идет не так.

мои настройки ФПИ в проекте/settings.py:

REST_FRAMEWORK = { 
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 
    'PAGINATE_BY'    : 10 
} 

мои urlpatterns в проекте/urls.py

urlpatterns = [ 
    ... 
    url(r'^api/v1/seeds/', include('seed.urls')), 
    ... 
    url('^.*$', IndexView.as_view(), name='index') 
] 

мои urlpatterns в проекте/семян/urls.py:

from django.conf.urls import url, include 
from rest_framework import routers 
from seed.views import SeedViewSet 

router = routers.SimpleRouter() 
router.register(r'^', SeedViewSet) 

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

мой проект/семена/views.py

from seed.serializers import SeedSerializer 
from seed.models import Seed 
from rest_framework import viewsets 

class SeedViewSet(viewsets.ModelViewSet): 
    queryset = Seed.objects.all() 
    serializer_class = SeedSerializer 
    # permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

    def perform_create(self, serializer): 
     serializer.save(user=self.request.user) 
     return super(SeedViewSet, self).perform_create(serializer) 

мой проект/семян/serializer.py

from authentication.serializers import AccountSerializer 
from rest_framework import serializers 
from seed.models import Seed 


class SeedSerializer(serializers.ModelSerializer): 
    user = AccountSerializer(read_only=True, required=False) 

    class Meta: 
     model = Seed 
     fields = ('id', 'user', 'jobs', 'list_name', 'proxyType', 'created_at', 'updated_at') 
     read_only_fields = ('id', 'user', 'jobs', 'created_at', 'updated_at') 

, что я мог бы сделать неправильно? или это что-то, что я должен делать по-другому из-за обновления?

редактировать и я использую angularJs опубликовать в API, а вот моя функция внутри моей службы:

function create(list_name, proxyType) { 
    return $http.post('/api/v1/seeds/', { 
    list_name: list_name, 
    proxyType: proxyType 
    }); 
} 
+0

Вы можете воссоздать ошибку с помощью теста python 'rest_framework'? Если да, можете ли вы добавить к этому вопросу неисправный тестовый код, так что более ясно, что происходит. –

+0

Для меня кажется, что у вас должен быть метод 'create' вместо' perform_create', поскольку 'create' принадлежит [ModelViewSet] (http://www.django-rest-framework.org/api-guide/viewsets/) и 'perform_create' принадлежит [GenericAPIView] (http://www.django-rest-framework.org/api-guide/generic-views/#genericapiview), но это всего лишь предположение – fodma1

+0

@AaronLelevier, можете ли вы показать мне, как сделать это? – Soufiaane

ответ

0

я изменил SeedViewSet от viewsets.ModelViewSet до generics.ListCreateAPIView, то я перекрытая метод post(self, request, *args, **kwargs) и он работал.

0
from rest_framework.decorators import list_route 

Пожалуйста, используйте ниже должности.

@list_route(methods=['post']) 
def perform_create(self, request): 
     serializer.save(user=self.request.user) 
     return super(SeedViewSet, self).perform_create(serializer) 
+1

это не работает., Все тот же проблема – Soufiaane

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