Django 2.x-根据关系数据库内容过滤重定向

时间:2019-03-20 04:40:41

标签: django

我有一个正在开发的应用程序,具有两种类型的用户(A和B),并且我有一个页面要重定向未经身份验证和类型B的用户。用户类型在关系数据库中设置。

我的两个数据库表是

User - pk, etc... Profile - pk, uid (user pk), account_type

我到目前为止所做的事情:

我已经在@login_required文档中使用过views.py来成功验证身份。

我可以过滤手动设置了pid的内容: Profile.objects.filter(user__pk=1) 我可以使用request.user.id

获取当前用户ID

我正在努力解决的问题

我试图做的是创建一个条件条件,在此条件下,我将request.user.id与过滤器一起使用以找到该用户,然后验证帐户类型。我不确定如何拉account_type,此时我的代码变得一团糟,并且可能无效。我已经进行了搜索,但是使用此处的关键字找到的所有内容都揭示了与我要解决的问题不同的问题。

编辑了其他信息

我在这里有2个应用程序,其中1个是accounts,一个是listings,我正在执行的页面是用于发布列表的,即listing应用程序中;我只希望一种类型的用户(B)能够发布它。

在我有此类的帐户中:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    location = models.CharField(max_length=30, blank=True)
    account_type = models.CharField(max_length=30)

在清单应用中,我尚未创建相关模型,我的理解是这种过滤将在视图中进行。

我正在做的视图:

@login_required
def post(request):
   current_user = request.user
   if : #here is where I want to filter, but haven't been able to get it to work

   else:
     return redirect('index')

2 个答案:

答案 0 :(得分:1)

从模型设计开始,如果系统具有一个用户只有一个配置文件的条件。然后在Profile模型中将uid设置为OnetoOneField,以便您可以通过User.objects.filter(id=request.user.id).profile.account_type轻松访问account_type。

否则,如果您的系统具有一个用户可以拥有多个配置文件的条件。然后,您首先需要访问它的配置文件,并通过添加更多过滤器来选择特定的配置文件,然后访问account_type:

User.objects.filter(id=request.user.id).profile_set.all()为您提供用户的所有个人资料。

User.objects.filter(id=request.user.id).profile_set.get(your_filter)为您提供用户的特定个人资料。

User.objects.filter(id=request.user.id).profile_set.get(your_filter).account_type使您可以访问特定用户的个人资料的account_type。

One to One relationship description here

Foreign (many to one) key description here

答案 1 :(得分:1)

您将直接获得帐户类型值

account_type = request.user.profile.account_type

因此,您可以根据下面的account_type值来做这些事情,

@login_required
def post(request):
    account_type = request.user.profile.account_type
    if account_type == "B"
       # do your stuff

    else:
        return redirect('index')