标签获取标签作为查询集

问题描述

我正在尝试将标签作为查询集进行遍历,并获得另一个具有相同标签的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