有条件地显示单个TastyPie资源的全部或部分字段



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

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

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

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

class EmployeeResource(ModelResource):
    # bunch of fields
    class Meta:
        if t = true:
            fields = [ ... ]

…然后通过/api/v1/employee/?t=true(或其他添加到URL)访问。

或者仅仅创建一个完全不同的资源,可以引用它来返回过滤后的字段集,这是否同样有效?

  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

Meta。字段用于指定返回哪些数据库列,而不是数据记录。这听起来像你正在寻找过滤掉某些记录基于某些条件(即查询所有人员与级别= 1):

* http://django-tastypie.readthedocs.org/en/latest/resources.html基本过滤

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

然后将过滤器指定为查询参数:/api/v1/员工/?水平= 1

最新更新