Django自定义用户模型多对多查询Webhook URL传入上下文方法
实现方案
前置检查
首先确认三个基础配置正确,否则逻辑会运行报错:
- 项目
settings.py中已经配置自定义用户模型,否则多对多关联关系不会生效:
AUTH_USER_MODEL = 'accounts.CustomUser'
- 给视图添加登录校验:类视图继承
LoginRequiredMixin,函数视图添加@login_required装饰器,避免未登录用户访问时触发属性错误。 - 你贴出的
tradestats/models.py中Webhook模型用到了uuid.uuid4但未导入uuid模块,记得在文件开头补充import uuid,否则执行数据库迁移时会抛出NameError。
视图层查询与传值逻辑
Django视图中可以直接通过请求对象拿到当前登录用户实例,利用已经定义的多对多字段直接查询关联的Webhook数据即可。如果只需要url字段值,推荐用values_list做轻量化查询,比查询全量模型字段性能更好。
修改你原有的context构建代码如下:
如果是类视图内部的方法,将代码里的
request.user替换为self.request.user即可
# 查询当前登录用户关联的所有Webhook的url字段,返回一维字符串列表格式的查询集 user_webhook_urls = request.user.webhook.values_list('url', flat=True) context = { 'form': form.cleaned_data, 'variable': value1, 'variable2': value2, 'user_webhook_urls': user_webhook_urls # 将查询结果传入context } return render(request, template_name='renko/renko_calculate.html', context=context)
模板中使用示例
传入模板的user_webhook_urls是可迭代的查询集,你可以直接在模板中遍历使用:
<div class="webhook-list"> <p>当前账号绑定的Webhook地址:</p> <ul> {% for webhook_url in user_webhook_urls %} <li>{{ webhook_url }}</li> {% empty %} <li>暂未绑定任何Webhook</li> {% endfor %} </ul> </div>
逻辑说明
request.user.webhook是多对多关系的正向管理器,直接返回当前用户关联的所有Webhook对象的查询集values_list('url', flat=True)的作用是只提取查询结果里的url字段,flat=True会把返回结果从嵌套元组拍平成一维的字符串列表,不需要额外做数据转换就能直接用- 该查询是懒执行的,只有你在模板里遍历取值的时候才会真正访问数据库,不会额外增加不必要的性能开销
内容的提问来源于stack exchange,提问作者Laszlo
相关产品推荐
相关产品推荐

