我正在开发一个 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/