请注意这是一个非常特殊的Django问题,所以如果你知道Django Rest Framework你会理解它
所以我在Django休息框架中有一个视图,其中包含ridden上的更新函数和_has_permission辅助函数
def update(self, request, *args, **kwargs):
permission, message = self._has_permission(data=request.data)
if not permission:
return Response({'error': message}, status=status.HTTP_403_FORBIDDEN)
return super().update(request, *args, **kwargs)
def _has_permission(self, data):
"""
Resolves if the logged in user has permission to update the data given the type of data
:param data:
:return:
"""
data['user_type'] = data['user_type'] if ('user_type' in data and data['user_type']) else None
....
some checks
....
return True, 'Has Permission'
如果函数_has_permission()看到&#39; user_type&#39;不在数据中,它在函数中设置数据[&#39; user_type&#39;] =无,但是当它出现时,request.data [&#39; user_type&#39;]现在存在并且变为无< / p>
如何在两个不同的范围内共享此字典。我认为函数有自己的范围
答案 0 :(得分:1)
与你的断言相反,这是根本不是特定于DRF,而是一个非常通用的Python原则。
将任何参数传递给函数总是传递对象本身。如果然后在函数中改变该对象,那么对该对象的所有其他引用都将看到该修改,因为它们仍然是对同一对象的引用。
答案 1 :(得分:0)
默认情况下,在Python中,所有args都通过引用(或者某种类型)传递,这意味着,您传递的是对象的引用,而不是副本,因此如果您更改函数内的对象,那么影响对象本身,而不是它的副本。您可以在http://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/
查看更多详情