2012-11-26 127 views
2

我使用django-taggit进行标记。我有同一个对象的django-tastypie REST资源。django-tastypie with django-taggit

在公开REST资源时,它不会获取标记字段(例如等同于model.tags.all())。

有什么特别的需要做?

我想对对象模型执行GET和POST操作并检索并插入标记。

有人可以指向示例设置以返回标记对象吗?我已经提到了要点here,但是不能理解在查询模型时如何检索相关标签。

感谢您的帮助。

回答

4

首先做一个TagResource

from taggit.models import Tag 

class TagResource(ModelResource): 
    class Meta: 
     queryset = Tag.objects.all() 

然后在你的资源,进行了标签:

class FooResource(ModelResource): 

    tags = fields.ToManyField(TagResource, 'tags', # if your tag field is 'tags' 
           full = True) 

    class Meta: 
     queryset = Foo.objects.all() 

它应该工作。

UPDATE

为了过滤标签,你必须通过TagResource对其进行过滤,假设您的API名称是v1,网址是:

/api/v1/tag/?slug=anytagyouwant&format=json

上述网址是像:'是anytagyouwant存在吗?'

为“获得具有anytagyouwant标签的所有富”

/api/v1/foo/?tags__slug=anytagyouwant&format=json

注意,要能筛选某些字段,你必须声明它在你的资源,使用FooResource为例:

from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS 

class FooResource(ModelResource): 

    tags = fields.ToManyField(TagResource, 'tags', # if your tag field is 'tags' 
           full = True) 

    class Meta: 
     queryset = Foo.objects.all() 
     filtering = dict(
      tags = ALL, 
      # or 
      tags = ALL_WITH_RELATIONS, 
     ) 
+0

谢谢。我怎样才能做标签过滤器? – Mutant

+0

我更新了答案 –

+0

关于第一个网址,你需要在TagResource添加过滤 - 过滤= { \t \t \t“塞”:ALL, \t \t}而这也返回一个标记对象,而不是Foo对象。我正在尝试将所有Foo对象与'anytagyouwant'标签映射到哪里 – Mutant