Почему user.has_perm() всегда возвращает false даже после добавления прав к объекту user путем его первого инстанцирования?
python manage.py код оболочки и все выходные данные
>>> user1 = users[2]
>>> print(user1.username)
esther
>>> print(exam_permissions[3])
core | exam | Can view exam
>>> print(user1.has_perm(exam_permissions[3]))
False
>>> user1.user_permissions.add(exam_permissions[3])
>>> print(user1.has_perm(exam_permissions[3]))
False
>>>
Отношения между пользователем и назначенными разрешениями являются отношениями "многие-ко-многим".
Добавление разрешения, как вы это делаете (только с помощью user1.user_permissions.add(exam_permissions[3])
не сохраняет его в базе данных, таким образом, вызов следующего user1.has_perm(exam_permissions[3])
всегда будет False
. Вам необходимо сохранить отношение или добавить его другим способом.
В документации вы можете найти это объяснение: https://docs.djangoproject.com/en/4.1/ref/models/relations/#django.db.models.fields.related.RelatedManager.add
Использование add() с отношениями "многие ко многим", однако, не вызовет никаких методов save() (аргумент bulk не существует), а создаст отношения с помощью QuerySet.bulk_create(). Если вам нужно выполнить какую-то пользовательскую логику при создании отношения, слушайте сигнал m2m_changed, который вызовет действия pre_add и post_add.
.