鱼C论坛

 找回密码
 立即注册
查看: 1843|回复: 2

[已解决]django 照着别人的写了之后报错了

[复制链接]
发表于 2023-6-8 18:21:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
AttributeError at /auth/login
'QuerySet' object has no attribute 'is_active'
Request Method:        POST
Django Version:        4.2.1
Exception Type:        AttributeError
Exception Value:       
'QuerySet' object has no attribute 'is_active'
参考的是这个网址:ht(删除)tp(删除)s://blog.csdn.n(删除)et/(删除)qq_44715689/article/details/120783553

我自己写了model 里面也添加了is_active目前不知道为什么会报这个错
最佳答案
2023-6-8 18:25:19
从您提供的错误信息中,看起来是您在尝试访问一个QuerySet对象的 is_active 属性,但是QuerySet对象并没有 is_active 这个属性。这是因为QuerySet是一组数据库查询的包装器,它代表从数据库检索的一组对象。

如果 is_active 是您的用户模型(User model)中的一个字段,那么您可能需要首先从QuerySet中取出一个特定的用户实例,然后访问这个用户实例的 is_active 属性。

例如,以下是一种可能的错误用法:
users = User.objects.filter(username='username')  # This returns a QuerySet.
if users.is_active:  # This will raise an AttributeError.
    ...

如果你需要取出一个特定的用户实例,你可以使用  get()  方法,而不是  filter()  方法。 get()  方法返回一个模型实例,而不是一个 QuerySet。

例如:
try:
    user = User.objects.get(username='username')  # This returns a User instance.
    if user.is_active:  # This is correct.
        ...
except User.DoesNotExist:
    ...

注意: get() 方法在没有找到任何对象或找到多个对象时会引发错误。因此,如果您期望用户名可能不存在,或者用户名可能不是唯一的,您需要捕获 DoesNotExist 异常或 MultipleObjectsReturned 异常。

如果你确实需要处理一个QuerySet(比如,你正在处理一个用户列表,而不是一个单一的用户),你可能需要循环遍历QuerySet,对每个用户实例进行处理。例如:
users = User.objects.filter(is_active=True)  # This returns a QuerySet.
for user in users:  # Iterate over the QuerySet.
    if user.is_active:  # This is correct.
        ...
总的来说,要注意的是,在尝试访问一个模型的字段时,你需要确保你正在操作的是一个模型实例,而不是一个 QuerySet。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-8 18:25:19 | 显示全部楼层    本楼为最佳答案   
从您提供的错误信息中,看起来是您在尝试访问一个QuerySet对象的 is_active 属性,但是QuerySet对象并没有 is_active 这个属性。这是因为QuerySet是一组数据库查询的包装器,它代表从数据库检索的一组对象。

如果 is_active 是您的用户模型(User model)中的一个字段,那么您可能需要首先从QuerySet中取出一个特定的用户实例,然后访问这个用户实例的 is_active 属性。

例如,以下是一种可能的错误用法:
users = User.objects.filter(username='username')  # This returns a QuerySet.
if users.is_active:  # This will raise an AttributeError.
    ...

如果你需要取出一个特定的用户实例,你可以使用  get()  方法,而不是  filter()  方法。 get()  方法返回一个模型实例,而不是一个 QuerySet。

例如:
try:
    user = User.objects.get(username='username')  # This returns a User instance.
    if user.is_active:  # This is correct.
        ...
except User.DoesNotExist:
    ...

注意: get() 方法在没有找到任何对象或找到多个对象时会引发错误。因此,如果您期望用户名可能不存在,或者用户名可能不是唯一的,您需要捕获 DoesNotExist 异常或 MultipleObjectsReturned 异常。

如果你确实需要处理一个QuerySet(比如,你正在处理一个用户列表,而不是一个单一的用户),你可能需要循环遍历QuerySet,对每个用户实例进行处理。例如:
users = User.objects.filter(is_active=True)  # This returns a QuerySet.
for user in users:  # Iterate over the QuerySet.
    if user.is_active:  # This is correct.
        ...
总的来说,要注意的是,在尝试访问一个模型的字段时,你需要确保你正在操作的是一个模型实例,而不是一个 QuerySet。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-8 18:51:14 | 显示全部楼层
这个错误是因为您的查询返回了一个 QuerySet 对象,而不是一个具体的对象实例,QuerySet没有 `is_active` 这个属性。在Django中,只有具体的用户实例才有 `is_active` 属性。

请确保您的查询返回正确的用户对象实例,并且您在模型(model)类中定义了正确的 `is_active` 字段。如果没有,请在模型类里面添加以下字段:

class YourUserModel(models.Model):
    # ...
    is_active = models.BooleanField(default=True, verbose_name='激活状态')
另外,您可能还需要检查你用于用户登录验证的视图函数(view function)和表单类(form class),以确保它们正确处理用户实例。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表