[英]all() got an unexpected keyword argument 'pk' in Django
I've got a problem with Django and the Django REST Framework. 我在Django和Django REST Framework上遇到问题。
When I go to http://mynameislee.co.uk/albums/ it works fine and returns the Django Framework fine but when I try http://mynameislee.co.uk/albums/1 I get all() got an unexpected keyword argument 'pk'. 当我转到http://mynameislee.co.uk/albums/时,它可以正常工作并返回Django框架,但是当我尝试http://mynameislee.co.uk/albums/1时 ,得到的all()出现了意外关键字参数“ pk”。
This is my code. 这是我的代码。
urls.py 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 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 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
You cant use all
with a filter set. 您不能将
all
与过滤器集一起使用。
album = Album.objects.all(pk=id) #wrong
Use filter
instead: 使用
filter
代替:
album = Album.objects.filter(pk=id)
>>> type(album) -> 'QuerySet'
Here are the docs with a lot of examples. 这是带有大量示例的文档 。
And as @Bjorn suggested: you can also use get
that will save you getting the item from the queryset: 就像@Bjorn建议的那样:您还可以使用
get
来节省从queryset获取项目的时间:
album = Album.objects.get(pk=id)
>>> type(album) -> 'Album'
I think you want 我想你要
album = Album.objects.filter(pk=id)
instead of 代替
album = Album.objects.all(pk=id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.