python - 如何区分 Django 中的帐户类型?
问题描述
如果您正在阅读本文,请提前感谢...
我正在尝试为用户创建个人资料/帐户页面,但我需要一种方法来区分登录的帐户是学生还是雇主,以便我可以使用 views.py 生成适合他们帐户的页面。
在 models.py 中,我有两种不同的配置文件类型可以与用户帐户相关联(由 django.contrib.auth 处理),请参阅下文以供参考。
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profilePic = models.ImageField(default='default.jpg', upload_to='profile_pics')
class Meta:
verbose_name = 'Student Profile'
def __str__(self):
return f"{self.user.username}'s Profile"
class Employer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profilePic = models.ImageField(default='default.jpg', upload_to='profile_pics')
company = models.CharField(max_length=100, default='Unspecified')
class Meta:
verbose_name = 'Employer/Parent Profile'
def __str__(self):
return f"{self.user.username}'s Profile"
在我的views.py 页面中,我正在尝试为帐户/个人资料创建一个视图,该视图可以检测当前登录用户的个人资料是否链接到“学生”或“家长”模型并相应地提供页面。我尝试了一种非常基本的方法,如下所示,但不出所料,它不起作用。
def account(request):
if user.student.username == True:
context = 'Account: Student'
return render(request, 'users/studentprofile.html', context)
elif user.employer.username == True:
context = 'Account: Employer'
return render(request, 'users/employer.html', context)
我想知道是否有人对我如何最好地实现这一点提出建议......提前道歉是这种方法结构不佳或违背 Django 编程的现状,我是一个完整的初学者!
在此先谢谢大家:)
解决方案
您实际上可以使用hasattr()student
检查用户是否具有or属性employer
if hasattr(user, 'student'):
... # your logic
elif hasattr(user, 'employer'):
... # your logic
以下是完全可选的,但我个人喜欢做的是在我的用户模型上创建一些简单的函数,就像这个例子一样:
class User(models.Model):
...
def is_student(self):
return hasattr(self, 'student')
def is_employer(self):
return hasattr(self, 'employer')
然后,您可以在视图中使用它们:
if user.is_student():
... # your logic
elif user.is_employer():
... # your logic
顺便说一句,不要为自己是初学者而道歉!这是一个很好的问题。我建议您阅读有关一对一关系的文档。
希望能帮助到你!
推荐阅读
- c# - 使用 moq 为方法编写模拟
- ios - 如何在 iOS Swift 中设计主题选择视图
- ecmascript-6 - 如何为特定对象键编写过滤条件?
- python - Lambda 正则表达式识别
- azure - Azure 中心辐射日志聚合
- c++ - 如何在成员函数中初始化引用成员变量并在其他成员函数中访问它 - C++
- java - 在多模块项目中覆盖配置文件中的属性在 Maven 中无法正常工作
- r - 表 1 包 R 中的 ANOVA P 值列
- git - 如何在开发分支上重新设置功能分支
- .net-core - 如何让 Alpine Linux 用户向我的应用程序提供他们的 Mutual TLS 证书?