我正在使用 Django-Tastypie。
我有一个类似的网址
/api/v1/pic/?event=25&format=json
这将返回 的所有照片?event=25
。但我还有其他一些事情需要考虑。
就像一个私人事件(即:)event.private=1
它应该对它返回的照片进行某种过滤。我该如何实施?任何指针都会有很大帮助。
你可以说得更详细点吗?你想要什么样的过滤器。
对于私有事件过滤器,您可以在模型中定义一个布尔字段:
=====================型号=====================
class Event(models.Model):
private = models.BooleanField()
...
class Pic(models.Model):
event = models.ForeignKey(Event)
date = models.DateTimeField()
...
=====================资源======================
class PicResource(ModelResource):
event = fields.ForeignKey(EventResource, 'event')
class Meta:
queryset = Pic.objects.all()
filtering = {
'event' : ALL_WITH_RELATIONS,
'date' : ALL
}
ordering = ['date', 'event']
然后,您可以查询资源:
我来到这里寻找更通用的 Tastypie 过滤,所以我想我会在@ge7600 的答案中添加更多内容。
如果要过滤字段,可以在 url 中使用任何有效的 Django 查询语法。如果我公开了这些字段进行过滤:
class PicResource(ModelResource):
event = fields.ForeignKey(EventResource, 'event')
class Meta:
queryset = Pic.objects.all()
filtering = {
'event' : ALL_WITH_RELATIONS,
'date' : ALL,
'title' : ALL
}
ordering = ['date', 'event']
我可以使用 url 参数进行过滤,例如:
/api/v1/pic/?event=25
/api/v1/pic/?title__contains=sunset
/api/v1/pic/?date__gte=2015-06-01&title__contains=wedding
如果我更仔细地阅读文档,我可能会更快地发现这一点......
你只需要定义resource。
from django.contrib.auth.models import User
from tastypie import fields
from tastypie.authorization import DjangoAuthorization
from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
from myapp.models import Entry
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'auth/user'
excludes = ['email', 'password', 'is_superuser']
class EntryResource(ModelResource):
user = fields.ForeignKey(UserResource, 'user')
class Meta:
queryset = Entry.objects.all()
list_allowed_methods = ['get', 'post']
detail_allowed_methods = ['get', 'post', 'put', 'delete']
resource_name = 'myapp/entry'
authorization = DjangoAuthorization()
filtering = {
'slug': ALL,
'user': ALL_WITH_RELATIONS,
'created': ['exact', 'range', 'gt', 'gte', 'lt', 'lte'],
}