首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tastypie - Queryset或过滤器

Tastypie - Queryset或过滤器
EN

Stack Overflow用户
提问于 2012-07-11 20:42:09
回答 2查看 5.4K关注 0票数 0

我正在使用tastypie,我只是遇到了一个问题。

我的问题是:

用户可以发布消息,如果其他用户订阅了该用户,他们可以在自己的主页上看到这些消息。它的和twitter一样,用户在推特上发微博,关注者看他们的推特。

我有一个针对所有消息的公共api。

我可以使用?userid=1过滤特定的用户消息

问题的坏解决方案:

我可以过滤多个用户的消息(从而解决问题)使用

?userid__in=1&userid__=5&...

但这不是一个好方法,因为url长度将增加到一个可能不允许的数量。(2000字)

有更好的方法吗?

有什么方法可以使用request.userqueryset中进行连接吗?

还是应该使用某种高级过滤

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-12 01:15:31

Tastypie已经通过__in过滤支持这一点(除了否定之外,ORM支持的所有内容都公开了)。不需要编码。

看这里:http://django-tastypie.readthedocs.org/en/v0.9.11/resources.html#basic-filtering

代码语言:javascript
复制
path/to/api/resource/?user_id__in=1,2,3,4,5,6

然而,您仍然有一个问题,即您的URL变得巨大,有人订阅了许多用户。您可以做的是将这些信息保存在DB模型中(通过单独的联合模型将哪个用户订阅为模型中的递归ManyToMany关系)。

然后,您可以通过资源公开它,而不必通过URL将订阅指定为参数和/或筛选器。相反,资源中的基本查询集是:

代码语言:javascript
复制
userids = request.user.subscription_userset.values(id)

前提是在您的self模型中有一个ManyToManyRelationship。看看herehere

票数 5
EN

Stack Overflow用户

发布于 2012-07-11 20:44:40

如果有人传递了一个想要查看更新的user_ids列表,然后对其进行过滤,该怎么办?就像这样:

URL: your/api/messages.json?user_ids=5,8,10,25

然后在代码中将其转换为实际列表,并进行查询:

Message.objects.filter(user__id__in=user_ids)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11441153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档