Django类视图下如何从数据库填充表单值实现编辑功能
解决方案
方法1:直接使用Django通用UpdateView实现编辑功能(推荐)
UpdateView原生支持根据主键获取对应记录、自动填充表单、更新数据的完整逻辑,无需手动编写数据查询和表单填充代码,你可以直接新增一个编辑专用的视图:
from django.views.generic.edit import UpdateView from .models import Company class CompanyUpdateView(UpdateView): # 指定要操作的模型 model = Company form_class = CompanyForm # 可以复用原来的新增表单模板 template_name = 'company/company.html' success_url = '/company' # 如果你的URL中传递的参数名是id而非默认的pk,需要加这一行 pk_url_kwarg = 'id'
步骤2:配置对应URL
在你的app的urls.py中新增带记录ID参数的访问路径:
urlpatterns = [ # 原有新增的路径保留 path('company/', CompanyView.as_view(), name='company_add'), # 新增编辑路径,注意参数名和上面视图的pk_url_kwarg对应 path('company/edit/<int:id>/', CompanyUpdateView.as_view(), name='company_edit'), ]
步骤3:修改页面的编辑按钮跳转链接
在你展示数据列表的模板中,给编辑按钮绑定对应跳转路径即可:
<a href="{% url 'company_edit' company.id %}">编辑</a>
可选方案:单视图同时兼容新增和编辑
如果你不想维护两个视图,也可以修改原来的FormView手动实现实例注入逻辑:
class CompanyView(generic.FormView): form_class = CompanyForm template_name = 'company/company.html' success_url = '/company' def get_form_kwargs(self): kwargs = super().get_form_kwargs() # 检查URL中是否传递了id参数 if self.kwargs.get('id'): # 查询对应记录注入到表单中 kwargs['instance'] = Company.objects.get(id=self.kwargs['id']) return kwargs def form_valid(self, form): form.save() return super().form_valid(form)
对应的URL可以合并为:
path('company/', CompanyView.as_view(), name='company_add'), path('company/edit/<int:id>/', CompanyView.as_view(), name='company_edit'),
内容的提问来源于stack exchange,提问作者Gaius G D'cruz
相关产品推荐
相关产品推荐

