【问题标题】:How to filter active users connected using an extended model class field如何过滤使用扩展模型类字段连接的活动用户
【发布时间】:2021-07-30 13:18:25
【问题描述】:

我已使用 OneToOne 关系将用户模型扩展到模型类“学生”。现在我想使用“学生”类中的字段(例如“姓名”)过滤所有活跃的学生。

在 django shell 中试过这个:

Student.objects.filter(user.is_active == True)
Traceback (most recent call last):
 File "<console>", line 1, in <module>
NameError: name 'user' is not defined

我的看法:

def entry(request):
     user = request.user
     if request.user.is_active:
        print("Already logged in")
        return redirect('home')
     else:
        return render (request, 'entry.html')

我的模特:

class Student(models.Model):
     name = models.CharField(max_length=200)
     branch = models.CharField(max_length=200, choices=BRANCHES)
     sem = models.CharField(max_length=200, choices=SEMESTERS)
     reg_no = models.CharField(max_length=200, unique = True)
     balance = models.IntegerField(default=0)
     pin_no = models.CharField(max_length=200, unique = True)
     college = models.ForeignKey(Institute, on_delete=models.CASCADE )
     user = models.OneToOneField(User, on_delete=models.CASCADE)```

【问题讨论】:

    标签: django django-models django-queryset django-users


    【解决方案1】:

    您可以使用以下方式过滤:

    Student.objects.filter(<b>user__is_active=True</b>)

    或者如果您想将Retrieve Student 模型链接到登录用户,并且该用户应该处于活动状态,您可以使用:

    Student.objects.filter(<b>user=request.user,</b> user__is_active=True)

    如果用户不是学生,或者如果用户不活跃,这将返回一个empty QuerySet。 p>

    你可以通过这个对request.user对象稍微提高效率,所以:

    if request.user.is_active and Student.objects.filter(user=request.user).exists():
        # user is a student and the user account is active
        pass

    【讨论】:

    • 感谢您的回复,我的问题需要进一步澄清,我实际上想将其添加到视图中的request.userdef entry(request): user = request.user if request.user.is_active: --- I meant here with request.user print("Already logged in") return redirect('home') else: return render (request, 'entry.html')
    • 我实际上在这里尝试做的是防止用户在他已经登录时返回登录页面,如果条件。但我的问题是,即使登录了除学生以外的其他类型的帐户,登录页面也不会显示给学生。请让我知道我是否可以尝试类似的东西:def entry(request): ***if Student.objects.filter(request.user__is_active=True):*** print("Already logged in") return redirect('home')
    • 我已经使用一对一关系将用户扩展到 3 个不同的模型,Student 是其中之一,所以我想在检查之前过滤并查看 request.user 是否是 Student 类型是否处于活动状态,因为它是用于学生登录
    • @SangeethJoseph:您可以检查Student 是否指的是Student.objects.filter(user=request.user, user__is_active=True) 的登录用户。
    猜你喜欢
    • 2018-07-21
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2020-01-08
    • 2012-05-01
    • 2014-06-16
    相关资源
    最近更新 更多