gpt4 book ai didi

python - AssertionError 无法在获取切片后过滤查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:00 25 4
gpt4 key购买 nike

我正在尝试创建一个基于用户身份验证限制结果的 View 。出于某种原因,列表切片总是导致 AssertionError Cannot filter a query once a slice has been take.

class CustomGalleryDetailView(DetailView):

def get_queryset(self):
if not self.request.user.is_authenticated():
return Gallery.objects.on_site().is_public()[:3]

else:
return Gallery.objects.on_site().is_public()

即使我尝试过

return Gallery.objects.all()[:3], 

没有进一步的过滤,我仍然得到同样的错误。

最佳答案

您正在使用 DetailView 类。

您可以在 Django docs for DetailsView 中看到这里在调用 get_queryset 方法后,下一个方法是 get_object(在 SingleObjectMixin 类中找到)

您可以在以下位置找到该方法的来源:https://github.com/django/django/blob/1.7/django/views/generic/detail.py#L21

您可以从该代码中看到查询集已被过滤,很可能是通过 .filter(pk=pk)

如果您想将可能的对象选择限制为仅前三行,您需要采用不同的方法,例如:

class CustomGalleryDetailView(DetailView):

def get_queryset(self):
if not self.request.user.is_authenticated():
qs = Gallery.objects.on_site().is_public()
valid_ids = qs.values_list('pk', flat=True)[:3]
return Gallery.objects.filter(pk__in=valid_ids)

else:
return Gallery.objects.on_site().is_public()

关于python - AssertionError 无法在获取切片后过滤查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560131/

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