抽象用户属性消失了..?



所以由于某种原因我得到这个错误:

$ python manage.py shell
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from auctions.models import *
>>> u = User.objects.all()
>>> u
<QuerySet [<User: bob>]>
>>> u.id
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'QuerySet' object has no attribute 'id'

我没有设置任何主键来覆盖 Djabgo 的默认值(这是代码......

class User(AbstractUser):
def __str__(self):
return f"{self.username}"

这是怎么回事???

这是因为您的QuerySetUsers。您可以将QuerySet视为(惰性)集合。它是将从数据库中检索的集合。集合可以包含零个、一个或多个User对象。

由于它是一个集合,因此它具有.id属性是没有意义的。如果集合为空,则该集合的.id意味着什么?如果它有多个元素,应该返回什么.id?此外,由于它将包含许多记录是未知的,因此它将"继承"它包装的模型对象的属性是没有意义的。

例如,您可以使用以下命令检索QuerySet的第一个User

u = User.objects.first()
print(u.id)

这是有效的.first()因为 [Django-doc] 将在此处返回一个User对象,如果找不到任何对象,则返回None。如果它因此找到一条记录,则u将是一个User对象,并且该User对象将具有.id属性。

最新更新