Django标签 - 按标签过滤

2 投票
1 回答
1845 浏览
提问于 2025-04-16 19:39

我正在做一个业余项目,我有一个模型:

class Post(models.Model):
    title = models.CharField(max_length=255)
    <..>
    tags = TagAutocompleteField()

TagAutocompleteField()django-tagging里的TagField()是一样的,实际上就是一个简单的CharField,所以当你用print post.tags时,它会输出'one two three',而不是['one', 'two', 'three',]这样的列表。

我还有一个视图:

def tagged(request, tag_id):
    tag = get_object_or_404(Tag, pk=tag_id)
    post_list = Post.objects.all() \
                .filter(tags__split__in=tag) \                                                          
                .filter(is_published=True) \
                .order_by('-time_publish')
    return render_to_response('plugins/persona/list.html', {
                              'post_list': post_list,
                              }) 

问题是我无法筛选出所有带有特定标签的帖子,因为标签是charField类型的。我试过用split(),但筛选器不允许这样做。

有人建议使用这个函数来获取标签列表:

def get_tags(self):                                                                                 
    return Tag.objects.get_for_object(self)

但我还是无法在筛选器中使用它。

我应该如何获取所有带有相同标签的帖子呢?通常使用标签的方式是通过标签来获取对象,但如果标签被多个应用使用,可能会返回超过帖子数量的结果。

1 个回答

2

试试用 regex

.filter(tags__iregex=r'\b%s\b' % tag)

撰写回答