Представление на основе функции DRF HTTP 405 Method Not Allowed
Я пытаюсь использовать представление на основе функций для создания нового объекта, но выдает такую ошибку:
HTTP 405 Метод не разрешен Разрешить: GET, OPTIONS Content-Type: application/json Vary: Accept
{ "detail": "Метод "POST" не разрешен". }
Я прочитал много вопросов на stackoverflow, но ни один из них не сработал для меня, вот мой код:
@api_view(['POST'])
@permission_classes([permissions.IsAuthenticated])
def todo_create(request,format=None):
if request.method == 'POST':
serializer = TodoSerializer(data=request.data)
if serializer.is_valid():
serializer.owner = request.user
serializer.save()
return Response(serializer.data)
return Response(serializer.errors)
урлы
urlpatterns = [
path('',todo_links,name='todo_links'),
path('lists/',todo_lists,name='todo_lists'),
path('create/',todo_create,name='todo_create'),
path('lists/<int:pk>/',todo_detail,name='todo_detail'),
path('lists/<int:pk>/update',todo_update,name='todo_update'),
path('lists/<int:pk>/delete',todo_delete,name='todo_delete'),
path('data',template,name='template'),
]
основной url
from snippet.views import api_root
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/',include('django.contrib.auth.urls')),
path('posts/',include('post.urls')),
path('api-auth/',include('rest_framework.urls')),
path('',include('snippet.urls')),
path('todo/',include('todos.urls'),name='todos-app'),
]
my settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
],
'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE':1
}
serializers.py
class TodoSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.HyperlinkedIdentityField(view_name='user-detail',format='html')
class Meta:
model = Todo
fields = ['id','owner','title','describe','complete']
my models.py
class Todo(models.Model):
owner = models.ForeignKey(User,on_delete=models.CASCADE,related_name='todos')
title = models.CharField(max_length=255)
describe = models.TextField(null=True,blank=True)
complete = models.BooleanField(default=False)
def __str__(self):
return self.title
<