pyramid - 基于资源父级运行不同的查询

标签 pyramid traversal

我正在开发一个 Pyramid 遍历项目,我想运行不同的查询来检索基于其父级的相同资源。
假设我有 3 个资源:客户、商店、订单。现在客户和商店都可以有订单列表。所以我将 OrderListResource 定义为资源,我的观点如下:

@view_config(context=resources.OrderListResource, renderer='json')
    def view_order_list(context, request):
        return {orders: context.retrieve_method()}

现在我想知道在资源父级上检索数据库的最佳实践是什么?
例如,OrderListResource 应如何决定按客户 ID 或按商店 ID 检索订单。逻辑应该位于 View 还是资源本身?
谢谢。

最佳答案

好吧,由于您使用的是遍历,因此获取资源的父级非常容易:

parent = context.__parent__

query = session.query(OrderList)

if isinstance(parent, CustomerResource):
   query = query.filter(OrderList.customer_id == parent.id)
elif isinstance(parent, StoreResource):
   query = query.filter(OrderList.store_id == parent.id)

如果您要检查的父级可能不是您的资源的直接父级,您可以使用 pyramid.traversal.find_interface方法。

或者,如果逻辑因订单是否包含在客户或商店中而有很大差异,则您可能会使用 containment View 谓词获得两个单独的 View 。

@view_config(context=resources.OrderListResource, containment=CustomerResource, renderer='json')
def view_order_list_for_customer(context, request):
    return ...

@view_config(context=resources.OrderListResource, containment=StoreResource, renderer='json')
def view_order_list_for_store(context, request):
    return ...

关于pyramid - 基于资源父级运行不同的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24239174/

相关文章:

python - SQLAlchemy 多态加载

python - 使用 Pyramid 服务文件

python 2.6 vs 2.7,用于 Pylons/Pyramid 项目

jquery - 使用 jQuery 递归获取与类过滤器匹配的元素的第一个父元素

algorithm - 树遍历以层次优先顺序和深度优先顺序递归

python - Pyramid .security : Is getting user info from a database with unauthenticated_userid(request) really secure?

python - 在 Heroku 上使用 Memcache 时,我应该配置 Beaker 的 `session.lock_dir` 吗?

java - 如何遍历这个XML来获取DATA?

jQuery XML 解析/遍历

javascript - 遍历字符串中的数字