Понимание поведения модели сохранения Django

Это вполне ожидаемо. Переменные имеют область . Если вы определяете их внутри блока управления (например, оператор 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);
1
задан Doug 14 July 2010 в 19:36
поделиться

2 ответа

Это происходит потому, что Пользователь имеет много-много отношений с Разрешением, поэтому, когда вы сделать пользователем.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))
0
ответ дан 2 September 2019 в 23:02
поделиться

Django не обновляет объекты в памяти при изменении объектов на диске. Ваш первый пользователь по-прежнему выглядит так, как когда он был прочитан с диска.

2
ответ дан 2 September 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: