django标记 - 按标记过滤

时间:2011-06-15 21:05:33

标签: python django view filter tags

我在free-time project,我有这个模型:

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

TagAutocompleteField()与来自django-tagging TagField()的{​​{1}}相同,因为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 个答案:

答案 0 :(得分:2)

尝试使用regex

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