2012-03-22 85 views
4

我想在GET响应中包含一些字段,并在POST确认响应中包含较小的字段子集。我必须在alter_detail_data_to_serialize中有很多del bundle ['field1'],del bundle ['field2']来实现这一点。有没有什么通用的方式可以指定字段并排除我的资源中的每个请求类型?字段并排除在tastypie

回答

5

我已经通过Tastypie源看去,我的结论如下....

你可以试着来测试您的资源,改变excludes属性的值在飞行时的方法是POST,但这会棘手,最重要的是骇人听闻。

因此,我想你最好的选择是做你正在做的事情,但也许而不是做多个del bundle[ 'field' ]介绍一个post_excludes属性或一些这样的实现一个更好,更灵活的方式来摆脱这些领域。例如,你可以做这样的事情:

class YourResource(Resource): 

    class Meta: 
     # ... 
     post_excludes = [ 'foo', 'bar' ] 
     # ... 

    # ... 

    def alter_detail_data_to_serialize(self, request, data): 
     if request.method == 'POST': 
      data.data = { 
       key : value for key, value in data.data.copy().iteritems() if \ 
       key not in self._meta.post_excludes } 
     return data 

    # ... 

这将是更清洁,并会遵守Tastypie的“规则”,这是重要的,以不与纠结最终,黑客攻击代码是很难维护。

希望这会有所帮助:)