我使用的是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
我使用的是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
我从来没有真正使用Django的标记,但通过源看着真快.get_for_object返回该对象的标签的查询集。不是一个实际的列表。
我不确定你的代码是否正在工作[从任务/比较问题开始]还是只是想改进它。但因为你是返回一个QuerySet你能不能继续对其进行筛选,例如:
Tag.objects.get_for_object(self).filter(name='new')
,或者能够使用的JamesO的例子:
if 'new' in tags: return True
我认为你需要把查询集成首先列表。
list(tags)
然后它应该工作。
请参阅documentation强制列表评估 - 并注意这样做的内存问题。
所以我的建议是先测试过滤 - 让我们知道它是否有效,因为我现在好奇。
您的建议很有用,似乎比强迫列表评估更有效。我尝试了tags = list(Tag.objects.get_for_object(self)),接着是JamesO的建议,但它没有评估True。虽然也许我做错了什么。 – wmfox3
tags = Tag.objects.get_for_object(self)
if 'new' in tags:
return True
由于某种原因,当我给该对象添加'new'标签时,这并不是评估为True。 – wmfox3
首先,你的代码不会运行正确:'if tag ='new':'是一个赋值,而不是比较。 –
没错。我打字太快了。 – wmfox3