如何使用 AbstractUser 类访问 request.user

Posted

技术标签:

【中文标题】如何使用 AbstractUser 类访问 request.user【英文标题】:How to access request.user with AbstractUser class 【发布时间】:2021-02-15 12:47:52 【问题描述】:

我正在尝试创建一个订单对象并将订单的客户字段(用户的外键)分配给当前用户。即使它通过了 if 语句并且可以对 request.user 进行身份验证,它也会将 customer 分配为空白值。

当我打印客户时,它会打印一个空行,但是当我打印 customer.id 时,它会打印客户的 ID。这发生在项目的所有视图中,因此它是一个全球性问题

我相信这与我的用户类继承自 AbstractUser 的事实有关

utils.py

def cartData(request):
    if request.user.is_authenticated:
        print('This will print')
        customer = request.user
        print(customer) #This will print as a blank line
        print(customer.id) #This will print the request.user.id
        print(customer.username) #This will print the request.user.username
        order, created = Order.objects.get_or_create(customer=customer, complete=False)

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
   author = models.BooleanField(default=False)

settings.py

AUTH_USER_MODEL = 'main.User' 

数据库也更新为空白用户。我觉得这可能很容易,但我无法弄清楚!谢谢。

【问题讨论】:

您是否在自定义用户类上实现了__str____repr__?确保在那里返回正确的字符串表示形式(您可能在那里返回一个空字符串)。您的 Order 实例很可能已正确创建而没有问题。变量customer不是你说的空值,只是当你打印它时,它的字符串表示是一个空字符串。 username 字段值是什么? @AbdulAzizBarkat 不幸的是,这似乎不起作用。它在数据库上也是空白的,所以我不相信它只是一个代表性问题(我将 on_delete 设置为 null)。感谢您的建议。 @unknown username 值也可以正确打印出来。 @sthompson232 print(order.customer is None) 给你什么?也可以试试print(type(customer)),也可以试试print(str(customer).strip() == "") 【参考方案1】:

我现在已经为用户添加了 first_name 和 last_name 并且它可以工作。虽然我没有在用户模型上将__str____repr__ 设置为名字或姓氏,但仍然有点困惑。如果有人知道为什么会这样,我很想知道。感谢大家的帮助!

【讨论】:

以上是关于如何使用 AbstractUser 类访问 request.user的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Django的User Model,扩展 AbstractUser类注意事项

如何使用 Busboy 访问 Express 4 req.body 对象

如何从 socket.io 中访问 req.session 变量?

如何在中间件中访问 (req , res)?

Django - sqlclear 无法删除具有 AbstractUser 外键约束的数据库

将 queryset as_manager 添加到 AbstractUser 模型