如何使用 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 变量?