3

我可以使用单个 TastyPie 资源并有条件地让它返回所有列或列的子集吗?

我有一个员工数据库,我可以通过以下方式提取完整记录:/api/v1/employee/. 但是该表中的某些数据可能会随着时间而改变(例如,有人转移到不同的组,或者他们的职位发生了变化)。

我们希望为历史目的存储某些数据,并能够在未来查询指标——例如:“有多少‘1 级’员工参加了这个测试?”。但是,如果 Bob 在参加考试后被提升到“2 级”,如果我只是链接到员工模型,他将不再出现在此查询中。

我可以将我的 TastyPie 资源设置为有条件地返回字段的子集,例如(伪代码如下):

class EmployeeResource(ModelResource):
    # bunch of fields

    class Meta:
        if t = true:
            fields = [ ... ]

...然后通过/api/v1/employee/?t=true(或 URL 的其他一些补充)访问。

还是仅仅创建一个完全不同的资源可以被引用以返回过滤的字段集是否同样有效?

4

2 回答 2

1
  1. 您可以创建不同的资源,从 EmployeeResource 子类化
  2. 您可以将数据放入自定义脱水方法中:

一个

class EmployeeResource(ModelResource):
    def dehydrate(self, bundle):
        t = bundle.request.GET.get('t')
        if t:
            bundle.data['custom_field'] = bundle.obj.custom_field
        return bundle

    class Meta:
        fields = common_fields
于 2013-05-20T17:27:58.677 回答
0

Meta.fields 用于指定返回哪些数据库列,而不是数据记录。听起来您希望根据某些条件过滤掉某些记录(即查询所有级别 = 1 的人):

* http://django-tastypie.readthedocs.org/en/latest/resources.html#basic-filtering

class EmployeeResource(ModelResource):
    class Meta:
        filtering = {
            "level": ('exact',),
        }

然后只需将过滤器指定为查询参数: /api/v1/employee/?level=1

于 2013-05-18T05:13:45.943 回答