我使用django-taggit进行标记。我有同一个对象的django-tastypie REST资源。django-tastypie with django-taggit
在公开REST资源时,它不会获取标记字段(例如等同于model.tags.all())。
有什么特别的需要做?
我想对对象模型执行GET和POST操作并检索并插入标记。
有人可以指向示例设置以返回标记对象吗?我已经提到了要点here,但是不能理解在查询模型时如何检索相关标签。
感谢您的帮助。
我使用django-taggit进行标记。我有同一个对象的django-tastypie REST资源。django-tastypie with django-taggit
在公开REST资源时,它不会获取标记字段(例如等同于model.tags.all())。
有什么特别的需要做?
我想对对象模型执行GET和POST操作并检索并插入标记。
有人可以指向示例设置以返回标记对象吗?我已经提到了要点here,但是不能理解在查询模型时如何检索相关标签。
感谢您的帮助。
首先做一个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,
)
谢谢。我怎样才能做标签过滤器? – Mutant
我更新了答案 –
关于第一个网址,你需要在TagResource添加过滤 - 过滤= { \t \t \t“塞”:ALL, \t \t}而这也返回一个标记对象,而不是Foo对象。我正在尝试将所有Foo对象与'anytagyouwant'标签映射到哪里 – Mutant