У меня проблема с Django и Django REST Framework.all() получил неожиданный аргумент ключевого слова 'pk' в Django
Когда я перехожу к http://mynameislee.co.uk/albums/, он отлично работает и возвращает Django Framework отлично, но когда я пытаюсь http://mynameislee.co.uk/albums/1 Я получаю all() получил неожиданный аргумент ключевого слова 'pk'.
Это мой код.
urls.py
# API
url(r'^albums/$', 'canary.views.album_list', name='album_list'),
url(r'^albums/(?P<pk>[0-9])$', 'canary.views.album_detail', name='album_detail'),
views.py
@login_required
@api_view(['GET', 'POST'])
def album_list(request):
# List all tasks, or create a new task.
if request.method == 'GET':
album = Album.objects.all()
serializer = AlbumSerializer(album, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = AlbumSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@login_required
@api_view(['GET', 'PUT', 'DELETE'])
def album_detail(request, pk):
# Get, update or delete a specific album
try:
album = Album.objects.all(pk=id)
except Album.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = AlbumSerializer(album)
return Response(serializer.data)
elif request.method == 'PUT':
serializer = AlbumSerializer(album, data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
album.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
models.py
class Album(models.Model):
album_id = models.AutoField(primary_key=True)
artist_name = models.CharField(max_length=255, blank=True)
album_name = models.CharField(max_length=255, blank=True)
def __unicode__(self):
return self.album_name
Правильное соглашение REST должно состоять в том, чтобы иметь/album/1, not/albums/1. Обратите внимание, что DRF делает все, что ваш код делает автоматически, если вы используете встроенные представления или виды/маршрутизаторы. –