我想在GET响应中包含一些字段,并在POST确认响应中包含较小的字段子集。我必须在alter_detail_data_to_serialize中有很多del bundle ['field1'],del bundle ['field2']来实现这一点。有没有通用的方法我可以在我的资源中指定字段并排除每个请求类型?
答案 0 :(得分:5)
我查看了Tastypie的来源,我的结论如下......
当方法是POST时,您可以尝试检测资源并动态更改excludes
属性的值,但这将是棘手的,最重要的是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
# ...
这样会更干净,并且会遵守Tastypie的“规则”,这对于最终不会出现难以维护的纠结,破解的代码非常重要。
希望这会有所帮助:)