2011-07-12 33 views
1

我使用的是django标签,并且我有一个标签对象数组。确定给定标签是否在其中的最佳方法是什么?在Django的标签对象数组中找到标签的最佳方法

def is_new (self): 
    tags = Tag.objects.get_for_object(self) 
    tagged = False 

    for tag in tags: 
     if tag = 'new': 
      tagged = True 

    return tagged 
+0

首先,你的代码不会运行正确:'if tag ='new':'是一个赋值,而不是比较。 –

+0

没错。我打字太快了。 – wmfox3

回答

1

我从来没有真正使用Django的标记,但通过源看着真快.get_for_object返回该对象的标签的查询集。不是一个实际的列表。

我不确定你的代码是否正在工作[从任务/比较问题开始]还是只是想改进它。但因为你是返回一个QuerySet你能不能继续对其进行筛选,例如:

Tag.objects.get_for_object(self).filter(name='new') 

,或者能够使用的JamesO的例子:

 
if 'new' in tags: 
    return True 

我认为你需要把查询集成首先列表。

list(tags) 

然后它应该工作。

请参阅documentation强制列表评估 - 并注意这样做的内存问题。

所以我的建议是先测试过滤 - 让我们知道它是否有效,因为我现在好奇。

+0

您的建议很有用,似乎比强迫列表评估更有效。我尝试了tags = list(Tag.objects.get_for_object(self)),接着是JamesO的建议,但它没有评估True。虽然也许我做错了什么。 – wmfox3

0
tags = Tag.objects.get_for_object(self) 

if 'new' in tags: 
    return True 
+0

由于某种原因,当我给该对象添加'new'标签时,这并不是评估为True。 – wmfox3