我正在使用tastypie,我只是遇到了一个问题。
我的问题是:
用户可以发布消息,如果其他用户订阅了该用户,他们可以在自己的主页上看到这些消息。它的和twitter一样,用户在推特上发微博,关注者看他们的推特。
我有一个针对所有消息的公共api。
我可以使用?userid=1过滤特定的用户消息
问题的坏解决方案:
我可以过滤多个用户的消息(从而解决问题)使用
?userid__in=1&userid__=5&...
但这不是一个好方法,因为url长度将增加到一个可能不允许的数量。(2000字)
有更好的方法吗?
有什么方法可以使用request.user在queryset中进行连接吗?
还是应该使用某种高级过滤?
谢谢!
发布于 2012-07-12 01:15:31
Tastypie已经通过__in过滤支持这一点(除了否定之外,ORM支持的所有内容都公开了)。不需要编码。
看这里:http://django-tastypie.readthedocs.org/en/v0.9.11/resources.html#basic-filtering
path/to/api/resource/?user_id__in=1,2,3,4,5,6然而,您仍然有一个问题,即您的URL变得巨大,有人订阅了许多用户。您可以做的是将这些信息保存在DB模型中(通过单独的联合模型将哪个用户订阅为模型中的递归ManyToMany关系)。
然后,您可以通过资源公开它,而不必通过URL将订阅指定为参数和/或筛选器。相反,资源中的基本查询集是:
userids = request.user.subscription_userset.values(id)前提是在您的self模型中有一个ManyToManyRelationship。看看here和here。
发布于 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)
https://stackoverflow.com/questions/11441153
复制相似问题