如何在ModelFormset模板中访问生成表单的源对象?库存盘点视图开发技术咨询
解决ModelFormset模板中访问源对象属性的问题
其实这个问题的解法很直观!Django的ModelFormset里的每个表单实例都自带一个instance属性,它直接对应生成这个表单的原始Stock模型对象。你要找的"what"就是它——只需要在模板里通过form.instance就能访问到源对象的所有属性,包括你需要的description.human_description。
直接修改你的模板代码:
{% for form in formset %} {% if form.instance.pk %} <!-- 只给已有数据库记录的表单显示描述,避免新增空表单报错 --> {{ form.instance.description.human_description }} {% endif %} {{ form }} {% endfor %}
额外补充说明:
form.instance就是你要找的源Stock条目,它包含了这个表单对应的数据库对象的所有属性和方法。- 加上
{% if form.instance.pk %}的判断是为了兼容formset里的额外空表单(如果你在创建formset时设置了extra参数):这些空表单还没有关联数据库记录,instance.pk为空,直接访问description会抛出属性错误,所以需要先判断过滤。 - 确保你的ModelFormset是基于Stock模型创建的,比如视图层要这样配置:
from django.forms import modelformset_factory from .models import Stock def stock_take_view(request): # 配置表单集,指定要编辑的字段 StockFormSet = modelformset_factory(Stock, fields=['quantity', 'your_other_field']) if request.method == 'POST': formset = StockFormSet(request.POST) # 处理表单提交逻辑(验证、保存等) else: # 初始化表单集,传入需要盘点的Stock查询集 formset = StockFormSet(queryset=Stock.objects.all()) return render(request, 'your_template.html', {'formset': formset})
这样调整后,盘点人员就能在每个表单上方看到对应Stock条目的格式化描述,方便核对实物与系统记录啦!
内容的提问来源于stack exchange,提问作者nigel222
相关产品推荐
相关产品推荐

