我正在使用django-taggit进行标记。我有同一个对象的django-tastypie REST资源。
在暴露REST资源时,它不会获取标记字段(例如,等同于model.tags.all())。
有什么特别需要做的吗?
我想在对象模型上执行GET和POST操作,并检索并插入标记。
有人可以指向示例设置以返回标记对象吗?我已经提到了gist here,但无法理解在查询模型时如何检索相关标签。
谢谢你的帮助。
答案 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,
)