Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查用户是否在某个表中_Python_Django - Fatal编程技术网

Python 如何检查用户是否在某个表中

Python 如何检查用户是否在某个表中,python,django,Python,Django,我在django中有我的用户表,为了区别所有用户,我创建了两个表(教师和学生) 两个表都从用户处获取fk 因此,为了进行授权,我如何检查用户是否在某个表中 我需要这样检查一下 def test_func(self): return self.request.user.check..if..it..exists..in..table 我的模特是这样的 class Teacher(models.Model): User = models.OneToOneField(settings.

我在django中有我的用户表,为了区别所有用户,我创建了两个表(教师和学生)

两个表都从用户处获取fk

因此,为了进行授权,我如何检查用户是否在某个表中

我需要这样检查一下

def test_func(self):
    return self.request.user.check..if..it..exists..in..table
我的模特是这样的

class Teacher(models.Model):
   User = models.OneToOneField(settings.AUTH_USER_MODEL)

这取决于模型的设置方式

如果你的老师模型看起来像这样

class Teacher(models.Model):
    user = models.ForeignKey(User)
然后,您应该能够使用隐式backref检查用户是否是教师

self.request.user.teacher_set.exists()

由于问题已经更新,表明模型与我预期的略有不同,这里有一个更新

class Teacher(models.Model):
    user = models.OneToOneField(User)
这意味着backref会有点不同

hasattr(self.request.user, "teacher")
正如您所提到的,您是在django模板中执行此操作的,我非常确定以下操作将起作用:

{% if user.teacher %}

这取决于模型的设置方式

如果你的老师模型看起来像这样

class Teacher(models.Model):
    user = models.ForeignKey(User)
然后,您应该能够使用隐式backref检查用户是否是教师

self.request.user.teacher_set.exists()

由于问题已经更新,表明模型与我预期的略有不同,这里有一个更新

class Teacher(models.Model):
    user = models.OneToOneField(User)
这意味着backref会有点不同

hasattr(self.request.user, "teacher")
正如您所提到的,您是在django模板中执行此操作的,我非常确定以下操作将起作用:

{% if user.teacher %}

既然你还没有发布你的模型,我就给你一个大概的方法

在您的视图中.py-

from .models import Teacher,Student

def test_func(request):
    user = request.user
    if (Teacher.objects.filter(user=user).count() > 0) or (Student.objects.filter(user=user).count > 0):
        #do your stuffs here..

既然你还没有发布你的模型,我就给你一个大概的方法

在您的视图中.py-

from .models import Teacher,Student

def test_func(request):
    user = request.user
    if (Teacher.objects.filter(user=user).count() > 0) or (Student.objects.filter(user=user).count > 0):
        #do your stuffs here..

一种方法是查询两个表:

teacher = Teacher.objects.filter(user=self.request.user)
student = Student.objects.filter(user=self.request.user)
if teacher or student:
     # do what you want.

一种方法是查询两个表:

teacher = Teacher.objects.filter(user=self.request.user)
student = Student.objects.filter(user=self.request.user)
if teacher or student:
     # do what you want.

如果你把参数“related_name”放在你的关系中,你可以使用反向关系

class SomeTable(models.Model):
    user = models.ForeignKey(
        User, #Your user model or Django one
        verbose_name = "User",
        related_name = "inverse_relation_name"
    )
然后必须使用过滤器的关键字参数调用:

SomeTable.inverse_relation_name.filter(id=self.request.user.id) #You will get a queryset 


如果你把参数“related_name”放在你的关系中,你可以使用反向关系

class SomeTable(models.Model):
    user = models.ForeignKey(
        User, #Your user model or Django one
        verbose_name = "User",
        related_name = "inverse_relation_name"
    )
然后必须使用过滤器的关键字参数调用:

SomeTable.inverse_relation_name.filter(id=self.request.user.id) #You will get a queryset 


您应该使用
exists()
而不是count。当你所关心的只是他们是否存在时,去数人是没有意义的。是的,我同意。。您的答案更好您应该使用
exists()
而不是count。当你所关心的只是他们是否存在时,去数人是没有意义的。是的,我同意。。你的答案是更好的答案,用html怎么写?我尝试了{%if user.teacher\u set.exists()%},但我得到了一个预期的运算符。出于兴趣-尝试去掉括号?谢谢你这样的回答。很乐意帮助:)下次你提问时,记得包括所有有用的详细信息。回答得好,用html怎么写?我尝试了{%if user.teacher\u set.exists()%},但我得到了一个预期的运算符。出于兴趣-尝试去掉括号?谢谢你这样的回答。很乐意帮助:)下次你提问时,记得包括所有有用的详细信息。你会得到一个查询集,而不是列表。另外,您的查询在我看来并不正确-您似乎正在使用用户的pk在某个表中查找记录。。。如果这真的起作用,那将是巧合…你是对的,这是一个查询集,如果没有巧合,过滤器案例不会抛出异常,但它只是一行代码巧合部分是关于你通过另一个不相关模型的id查找一个模型…我看到了我的错误,我没有看到Goun2使用的是OneToOne,它没有related_name属性,它在对象中有related表(如果存在)。您将获得一个queryset,而不是一个列表。另外,您的查询在我看来并不正确-您似乎正在使用用户的pk在某个表中查找记录。。。如果这真的起作用,那将是巧合…你是对的,这是一个查询集,如果没有巧合,过滤器案例不会抛出异常,但它只是一行代码巧合部分是关于你通过另一个不相关模型的id查找一个模型…我看到了我的错误,我没有看到Goun2使用的是OneToOne,如果不具有related_name属性,则在对象中具有related表(如果存在)