1

通常我们会做这样的查询

@MyModel.query_method(path='mymodels', name='mymodel.list')
def MyModelList(self, query):
   return query

但是如何在 Endpoints 模型上执行自定义查询以及如何传递除“id、limit、order..”等之外的自定义参数

例如:

return query.filter(Student.name == somename )

如何向端点提供“somename”?

4

1 回答 1

3

如果您要过滤的属性是您的模型的一部分,您可以添加“名称”作为 query_field

@MyModel.query_method(path='mymodels',
                      name='mymodel.list',
                      query_fields=('name',))

(MyModel.name == name)如果在 API 请求中提供了名称,这将自动应用相等过滤器。

如果您需要更多自定义查询,您可以使用EndpointsAliasProperty您的模型并直接访问模型的_endpoints_query_info._filters

使用日期进行不等式过滤的示例:

class MyModel(EndpointsModel):

    ...
    updated = EndpointsDateTimeProperty(auto_now=True)
    ...

    def MinDateSet(self, value):
        if value is not None:
            self._endpoints_query_info._filters.add(MyModel.updated >= value)

    @EndpointsAliasProperty(setter=MinDateSet,
                            property_type=message_types.DateTimeField)
    def minDate(self):
        """
        minDate is only used as parameter in query_methods
        so there should never be a reason to actually retrieve the value
        """
        return None


@MyModel.query_method(path='mymodels',
                      name='mymodel.list',
                      query_fields=('minDate',))

MyModel.updated >= minDate如果 API 请求中提供了 minDate,这将自动应用过滤器。

于 2015-02-02T11:38:15.820 回答