django - Django 2.x - 根据关系数据库内容过滤重定向
问题描述
我有一个正在开发的应用程序,它有 2 种类型的用户(A 和 B),我有一个页面,我想重定向未经过身份验证且不是 B 类型的用户。用户类型在关系数据库中设置。
我的两个数据库表是
User - pk, etc...
Profile - pk, uid (user pk), account_type
到目前为止我做了什么:
我已经@login_required
在我的views.py
文档中使用了成功验证身份验证。
我可以过滤手动设置 pid 的内容:
Profile.objects.filter(user__pk=1)
并且我可以通过以下方式获取当前用户 IDrequest.user.id
我正在努力解决的问题
我试图做的是创建一个条件,在其中我使用request.user.id
过滤器来查找该用户,然后验证帐户类型。我不知道如何拉,account_type
此时我的代码变得一团糟,而且可能无效。我已经对此进行了搜索,但是使用此处的关键字找到的所有内容都揭示了与我要解决的问题不同的问题。
编辑了附加信息
我在这里使用了 2 个应用程序,其中 1accounts
个是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')
解决方案
从您的模型设计开始,如果您的系统具有一个用户只有一个配置文件的标准。然后将 Profile 模型中的 uid 设置为 OnetoOneField 以便您可以轻松访问 account_type User.objects.filter(id=request.user.id).profile.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。
推荐阅读
- bootstrap-4 - 如何解决 Bootstrap Tour 的“getTipElement() 不是函数”错误?
- c# - 当最终用户添加选择条件时如何在 Windows 窗体中更新 DataGridView
- python - django 中的追随者系统“bool 不可调用”
- docker - 从容器挂载主机文件时如何自动创建文件而不是目录
- c - OS X 上未定义的符号“_clone”
- node.js - 如何在 Firebase 的计划任务中执行 NumChildren()?
- r - 我无法正确格式化所需的输出
- php - 当我在 Symfony + VichUploaderBundle 中检索实体时如何获取图像 URL?
- flutter - 找不到名为“split-per-abi”的选项
- c# - 如何等到包含文件的目录在C#中被递归删除