gpt4 book ai didi

python - all() 在 Django 中得到了一个意外的关键字参数 'pk'

转载 作者:行者123 更新时间:2023-11-28 21:18:32 25 4
gpt4 key购买 nike

我遇到了 Django 和 Django REST Framework 的问题。

当我转到 http://mynameislee.co.uk/albums/ 时它工作正常并返回 Django 框架正常但是当我尝试 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)

模型.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

最佳答案

您不能将 all 与过滤器集一起使用。

album = Album.objects.all(pk=id) #wrong

改用过滤器:

album = Album.objects.filter(pk=id)
>>> type(album) -> 'QuerySet'

这是 docs有很多例子。

正如@Bjorn 所建议的:您还可以使用 get 来节省您从查询集中获取项目的时间:

album = Album.objects.get(pk=id)
>>> type(album) -> 'Album'

关于python - all() 在 Django 中得到了一个意外的关键字参数 'pk',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com