Как получить дочернюю модель, имеющую отношение один к одному с моделью пользователя по умолчанию в Django?

Я создал модель, имеющую отношение один к одному с моделью User по умолчанию, чтобы расширить ее для предоставления некоторых прав для вкладок на моем сайте. Теперь я хочу не показывать опции вкладок пользователям, не имеющим прав доступа к ним.

модель разрешения пользователя:

from django.contrib.auth.models import User

class userpermissions(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

Проверка наличия или отсутствия прав у пользователя Я создал функцию, которая должна получить экземпляр модели userpermission вошедшего пользователя. Для этого я использовал следующий код ->

def check(user):
    up = User.userpermissions_set.get(id=user.id)

Теперь, когда пользователь входит в систему, функция login будет вызывать эту функцию проверки и перенаправлять на вкладку, к которой пользователь имеет доступ, а также отправлять переменную up, содержащую все разрешения пользователя, чтобы темплейт Navbar мог скрыть те вкладки, к которым у пользователя нет доступа.

Теперь проблема, с которой я столкнулся - когда я запускаю сервер, он показывает эту ошибку ->

AttributeError at / объект типа 'User' не имеет атрибута 'userpermissions_set'

Я видел на YouTube, что для получения экземпляра дочерней модели (не знаю, как ее назвать...) нужно использовать ее имя all в маленьком регистре с _set (пример - parent.child_set.all() )

В соответствии с ошибкой в браузере, похоже, что это неправильный способ получения данных дочерней модели (опять же... не знаю, как это назвать...).


модель разрешения пользователя:

from django.contrib.auth.models import User

class userpermissions(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

Проверка наличия или отсутствия прав у пользователя Я создал функцию, которая должна получить экземпляр модели userpermission вошедшего пользователя. Для этого я использовал следующий код ->

def check(user):
    up = User.userpermissions_set.get(id=user.id)

Теперь, когда пользователь входит в систему, функция login будет вызывать эту функцию проверки и перенаправлять на вкладку, к которой пользователь имеет доступ, а также отправлять переменную up, содержащую все разрешения пользователя, чтобы темплейт Navbar мог скрыть те вкладки, к которым у пользователя нет доступа.

Теперь проблема, с которой я столкнулся - когда я запускаю сервер, он показывает эту ошибку ->

AttributeError at / объект типа 'User' не имеет атрибута 'userpermissions_set'

Я видел на YouTube, что для получения экземпляра дочерней модели (не знаю, как ее назвать...) нужно использовать ее имя all в маленьком регистре с _set (пример - parent.child_set.all() )

В соответствии с ошибкой в браузере, похоже, что это неправильный способ получения данных дочерней модели (опять же... не знаю, как это назвать...).

Я ожидал получить все данные дочерней модели, но это не сработало...

Для создания отношения один-к-одному между дочерней моделью и моделью User по умолчанию в Django можно использовать тип поля OneToOneField. Вот пример того, как вы можете определить дочернюю модель с отношением один-к-одному к модели User: В этом примере ChildModel имеет отношение один-к-одному с моделью User, и поле user в модели ChildModel представляет это отношение. Аргумент on_delete определяет, что должно произойти с дочерней моделью при удалении связанного с ней пользователя.

Затем вы можете использовать модели ChildModel и User в вашем Django приложении следующим образом:

Вернуться на верх