Django,用户将用户重定向到不同的页面类型

时间:2018-03-04 06:39:10

标签: django django-allauth

我希望用户在登录时将其重定向到不同的页面。

我正在使用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'

有谁知道这是什么问题?

1 个答案:

答案 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):
...