Это вполне ожидаемо. Переменные имеют область . Если вы определяете их внутри блока управления (например, оператор if
), то они не будут доступны снаружи. Итак, что вам нужно сделать, это инициализировать его снаружи так:
$text-color: null;
$background-color: null;
@if $colorscheme == white {
$text-color: #333;
$background-color: #fff;
}
@else {
$text-color: #ccc;
$background-color: #333;
}
Или ...
$text-color: #ccc;
$background-color: #333;
@if $colorscheme == white {
$text-color: #333;
$background-color: #fff;
}
Хотя было бы менее подробным использовать if()
выполните следующие действия:
$text-color: if($colorscheme == white, #333, #ccc);
$background-color: if($colorscheme == white, #fff, #333);
Это происходит потому, что Пользователь имеет много-много отношений с Разрешением, поэтому, когда вы сделать пользователем.user_permissions.add (p)
, таблица auth_user не обновляется. Вместо этого обновляется таблица «сквозная» для этой связи («auth_user_user_permissions»). Фактически, вам вообще не нужно вызывать user.save ()
.
Метод get_all_permissions ()
, похоже, использует кэшированные данные, поэтому, если вам нужны последние изменения, используйте:
user.user_permissions.all()
Обратите внимание, что это вернет список объектов разрешений, поэтому, если вы хотите список кодовых имен в том же формате, что и при вызове get_all_permissions ()
(хотя не уверен, зачем вам это нужно), вы можете сделать это:
set(user.user_permissions.values_list('codename', flat=True))
Django не обновляет объекты в памяти при изменении объектов на диске. Ваш первый пользователь по-прежнему выглядит так, как когда он был прочитан с диска.