【发布时间】: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() == "")
标签: python-3.x django request abstractuser