Python 如何检查用户是否在某个表中
我在django中有我的用户表,为了区别所有用户,我创建了两个表(教师和学生) 两个表都从用户处获取fk 因此,为了进行授权,我如何检查用户是否在某个表中 我需要这样检查一下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.
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表(如果存在)