Для этого нет единственного решения (ну, есть eval
, но не стоит серьезно относиться к этому). Доступ к глобальным переменным возможен динамически через window
, но это не работает для переменных, локальных для функции.
Почти всегда есть лучшее решение, чем использование переменных переменных! Вместо этого вы должны смотреть на структуры данных и выбирать правильную для своей проблемы.
Если у вас есть фиксированный набор имен, например
// BAD
var foo = 42;
var bar = 21;
var key = 'foo';
console.log(eval(key));
сохранить эти имена / значения в качестве свойств объекта и использовать нотацию скобки для динамического поиска:
// GOOD
var obj = {
foo: 42,
bar: 21,
};
var key = 'foo';
console.log(obj[key]);
Если у вас есть «последовательные» нумерованные переменные, такие как
// BAD
var foo1 = 'foo';
var foo2 = 'bar';
var foo3 = 'baz';
var index = 1;
console.log(eval('foo' + index));
, тогда вы должны использовать массив и просто использовать индекс для доступа к соответствующему значению:
// GOOD
var foos = ['foo', 'bar', 'baz'];
var index = 1;
console.log(foos[index - 1]);
Попробуйте этот класс разрешений
# permissions.py
from rest_framework.permissions import BasePermission
class MyCustomPermissionClass(BasePermission):
def has_permission(self, request, view):
"""
You need to allow everyone to access the "list,create" apis. So, you should return "True" always
"""
return True
def has_object_permission(self, request, view, obj):
return request.user == obj # here "obj" will be the "User" instance
# views.py
class UserViewSet(viewsets.ModelViewSet):
permission_classes = [MyCustomPermissionClass, ]
queryset = User.objects.all()
serializer_class = UserSerializer