Django UpdateView模板如何获取当前实例grpid值生成带参跳转链接
Django模板获取关联外键ID实现跳转的解决方案
问题原因
你现有代码的错误在于模板中取grpid的逻辑不对:form.accgrp是Django生成的表单字段实例,不是当前编辑的Account对象关联的AccGroup实例,自然读取不到grpid属性。
解决方案
Django的UpdateView在渲染模板时,会自动把当前正在操作的模型实例注入到模板上下文,你可以用两个变量直接访问:
- 通用变量名
object,所有类视图通用 - 模型小写名
account,和你定义的Account模型对应
你只需要把模板里的链接2代码改成如下写法即可:
<a class="btn btn-info btn-sm" href="{% url 'polls:accgrpList' object.accgrp.grpid %}">Back To Account List</a>
可选优化
- 如果你要做兼容兜底,避免极端情况下关联对象为空报错,可以加模板过滤器设置默认值:
<a class="btn btn-info btn-sm" href="{% url 'polls:accgrpList' object.accgrp.grpid|default:0 %}">Back To Account List</a>
- 你现有视图的
get_success_url方法可以简化,不需要额外查询数据库:UpdateView在表单保存成功后会自动把实例赋值给self.object,优化后代码如下:
class AccountUpdateForm(UpdateView): model = Account fields = ['shortcut','accname','accgrp'] def get_success_url(self): # 直接使用self.object,不需要再次查询数据库 return f'/polls/accmst/{self.object.accid}' # 更规范的写法推荐用reverse避免硬编码路径,假设你accmst页面的路由名为accmstDetail: # from django.urls import reverse # def get_success_url(self): # return reverse('polls:accmstDetail', args=[self.object.accid])
内容的提问来源于stack exchange,提问作者user2035041
相关产品推荐
相关产品推荐

