Я не понимаю некоторых основ, связанных с пользовательскими моделями пользователей.

Я хотел удалить пользователя. После некоторой борьбы я пришел к следующему результату: views.py

the_user = get_user_model()

@login_required
def del_user(request):
    email = request.user.email
    the_user.objects.filter(email=email).delete()
    messages.warning(request, "bruker slettet.")
    return redirect("index")

Но я действительно не понимаю. В строке

email = request.user.email.

Почему это не так

email = request.the_user.email

Здесь есть некоторые основы, которые я не понимаю в отношении пользовательских моделей пользователей. Это происходит потому, что пользователь ссылается на AbstractBaseUser?

Прошу извинить меня за этот вопрос.

request является экземпляром объекта HttpRequest. Он представляет текущий полученный запрос. AuthenticationMiddleware аутентифицирует пользователя, сделавшего запрос (на основе cookies или как вы это настроили), и добавляет к нему атрибут request.user, чтобы ваш код мог узнать, кто является текущим пользователем, сделавшим запрос.

То, что вы называете the_user, - это User класс модели. Это произвольное имя, которое вы дали переменной в своем коде.

К вашему сведению, объект request.user уже является полноценным экземпляром User, у которого уже есть метод delete. Вам не нужно снова искать того же пользователя через класс модели the_user, вы можете просто сделать:

@login_required
def del_user(request):
    request.user.delete()
    messages.warning(request, "bruker slettet.")
    return redirect("index")

Атрибут .user задается атрибутом AutenticationMiddleware [Django-doc]. Таким образом, он проверяет переменные сессии на наличие ключа с именем _auth_user_id, и если он содержит первичный ключ пользователя, то может получить соответствующий объект пользователя (на основе выбранной вами модели пользователя).

Таким образом, это не имеет никакого отношения к имени модели (the_user, кстати, не самое удачное имя, поскольку классы пишутся на PascalCase), имя всегда .user, или .auser, если вы хотите получить его асинхронным способом.

Объект .user также извлекается беззаботно: пока вам не нужно получить доступ к атрибуту request.user, вызвать метод или сделать что-то еще, он не извлекается.

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