我希望用户在登录时将其重定向到不同的页面。
我正在使用django-allauth登录系统,我为用户创建了一个配置文件表,其中包含一个带有用户表的OnetoOne字段,就像这样....
#models.py
class Profile(models.Model):
TYPE_CHOICES = (
('sup', 'supplier'),
('dis', 'distributor'),
)
type = models.CharField(max_length=3, choices=TYPE_CHOICES, unique=True, null=True, blank=True, default=None)
user = models.OneToOneField(User, on_delete=models.CASCADE)
nationality = CountryField()
company = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
phone = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
skype = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
address = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
登录后,他们将访问名为"重定向"的视图。 (exampale.com/app/rediect)
对于这种观点,我使用了这个
#views.py
@login_required
def redirect(request):
if request.user.profile.filter(type='sup'):
return redirect('/app/a')
elif request.user.profile.filter(type='dis'):
return redirect('app/b')
然而,当我访问此页面时。有错误
File "/opt/project/app/views.py", line 27, in redirect
if request.user.profile.filter(type='adv'):
AttributeError: 'Profile' object has no attribute 'filter'
有谁知道这是什么问题?
答案 0 :(得分:3)
您不需要过滤器来访问onetoone字段。 user.profile
已经返回了个人资料实例,因此您可以直接访问个人资料类型:
if request.user.profile.type == "sup":
return redirect('/app/a')
if request.user.profile.type == "dis":
return redirect('/app/b')
此外,您需要将视图重命名为不覆盖Django的redirect
函数:
@login_required
def my_redirect(request):
...