问题描述
我正在尝试将标签作为查询集进行遍历,并获得另一个具有相同标签的BlogPost,但是我得到了
def get_related_content(self):
related_content = []
if self.tags:
for tag in self.tags:
related_content += BlogDetailPage.objects.live().filter(tags__name=tag)
related_content += OfferDescription.objects.live().filter(tags__name=tag)
else:
return related_content
'_ClusterTaggableManager' object is not iterable
我也尝试过使用django-taggit get_qeury_set()
方法,但是它不起作用,似乎没有包含在w中。
def get_related_content(self):
related_content = []
if self.tags:
for tag in self.tags.get_query_set():
related_content += BlogDetailPage.objects.live().filter(tags__name=tag)
related_content += OfferDescription.objects.live().filter(tags__name=tag)
else:
return related_content
'_ClusterTaggableManager' object has no attribute 'get_query_set'
如何遍历所有self.tags
并获得其他使用相似标签的页面模型?
我的模特:
class OfferDescriptionPageTag(TaggedItemBase):
content_object = ParentalKey('OfferDescription',on_delete=models.CASCADE,related_name='tagged_items')
class OfferDescription(Page):
tags = ClusterTaggableManager(through=OfferDescriptionPageTag,blank=True)
解决方法
在第一个示例中,尝试使用for tag in self.tags.all():
。
您的行if self.tags
将无济于事,因为标签关系是管理者而不是查询集,并且始终会得出True
。您可以测试if self.tags.exists()
。
在第二个代码示例中,方法应为.get_queryset()
。参见https://github.com/wagtail/django-modelcluster/blob/master/modelcluster/contrib/taggit.py#L26。