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

时间:2013-05-17 22:36:36

标签: python django django-models tastypie

我可以使用单个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(或对网址的其他一些补充)进行访问。

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

2 个答案:

答案 0 :(得分:1)

  1. 您可以创建一个不同的资源,从EmployeeResource
  2. 创建子类
  3. 您可以将数据放入自定义脱水方法中:
  4. 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
    

答案 1 :(得分: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 /雇员/?级别= 1