过滤器在django中没有在for循环中工作

时间:2017-12-13 16:35:51

标签: python django django-views

我正在尝试在视图中获取for循环中的数据。这是我的代码:

def func(request):

list = UserBookmark.objects.values('bookmark').filter(tag = "a")
print list
for i in list:
    print i
    tag_ids = UserBookmark.objects.values('tag').filter(bookmark = i)
    print tag_ids
return render(request,'index.html')

当我打印i时,我得到了i的值。此外,我有记录,其中bookmark = i 打印我给出这样的值:

  {u'bookmark': u'https://classroom.udacity.com/courses/cs101/lessons/48753036/concepts/487183640923'}

当我在shell中运行此查询时:

tag_ids = UserBookmark.objects.values('tag')。filter(bookmark ='https://classroom.udacity.com/courses/cs101/lessons/48753036/concepts/487183640923')

我也获得了tag_ids的价值

但我在for循环中设置了一个空的查询。这看起来像是一些愚蠢的错误,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

查询集上的.values()方法提供了类似字典的对象列表。迭代此列表将返回单个词典。因此,您试图在forloop内部匹配整个字典。它等同于

queryset.filter(
    bookmark={u'bookmark': u'http://www.example.com'}
)

更新:关于能够使用.values()我错了。这是一个词典列表,而不是单独的词典。

而是尝试:

for i in list:
    tag_ids = UserBookmark.objects.values('tag').filter(bookmark=i['bookmark'])