django-tastypie与django-taggit

时间:2012-11-26 20:54:26

标签: django tastypie django-taggit

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

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

有什么特别需要做的吗?

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

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

谢谢你的帮助。

1 个答案:

答案 0 :(得分: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()

它应该有用。

<强>更新

为了过滤代码,您必须通过TagResource进行过滤,假设您的api名称为v1,网址为:

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

上面的网址是:'anytagyouwant是否存在?'

for'get all foo that anytagyouwant tag'

/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,
        )