字段并排除在tastypie中

use*_*061 4 tastypie

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

kgr*_*kgr 5

我查看了Tastypie的来源,我的结论如下......

excludes当方法是POST时,您可以尝试检测资源并动态更改属性值,但这将是棘手的,最重要的是hackish.

因此,我猜你最好的办法就是做你正在做的事情,但也许不要做多次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

    # ...
Run Code Online (Sandbox Code Playgroud)

这将是更清洁,并符合Tastypie的"规则",这是非常重要的,以便最终得到难以维护的纠结,被黑客攻击的代码.

希望这可以帮助 :)