def staff_detail(request, nid): """ 员工个人详情页面 """ # 获取员工信息 staff_info 和它对应的 StaffForm staff_info = models.StaffInfo.objects.filter(RES_ID=nid).first() StaffForm = StaffStaticModelForm(instance=staff_info) # 获取员工对应的 Emergency 的集合 # emergency_info = models.Emergency.objects.filter(res_id=nid).all() # EmergencyForm = EmergencyStaticModelForm(instance=emergency_info) EmergencyFormSet = forms.inlineformset_factory(models.StaffInfo, models.Emergency, fields=('name', 'relation', 'address', 'tel'))(instance=staff_info) return render(request, "staff_detail.html", {"StaffForm": StaffForm, "EmergencyFormSet": EmergencyFormSet}) THML中是 <table class="table table-striped"> <thead> <tr> <th>紧急联系人</th> </tr> </thead> <tbody> {% for obj in EmergencyFormSet %} {% for field in obj %} {% if field.label != "res_id" %} <tr> <td width="200" style="text-align: right">{{ field.label }}</td> <td style="width: 1000px">{{ field }}</td> </tr> {% endif %} {% endfor %} {% endfor %} </tbody> </table>,为什么会输出几行空的紧急联系人
时间: 2024-03-14 22:49:09 浏览: 17
根据给出的代码,可能是因为在循环遍历 EmergencyFormSet 中的每个对象时,如果该对象中的某些字段的 label 值为 "res_id",则会跳过该字段,不输出对应的表格行。如果 Emergency 模型中存在名为 "res_id" 的字段,但其 label 值为其他值或为空,则会导致输出几行空的紧急联系人。建议检查 Emergency 模型中字段的 label 值是否都正确设置。
相关问题
def staff_detail(request, nid): """ 员工个人详情页面 """ # 获取员工信息 staff_info 和它对应的 StaffForm staff_info = models.StaffInfo.objects.filter(RES_ID=nid).first() StaffForm = StaffStaticModelForm(instance=staff_info) # 获取员工对应的 Emergency 的集合 # emergency_info = models.Emergency.objects.filter(res_id=nid).all() # EmergencyForm = EmergencyStaticModelForm(instance=emergency_info) EmergencyFormSet = forms.inlineformset_factory(models.StaffInfo, models.Emergency, fields='__all__')(instance=staff_info) print(EmergencyFormSet) return render(request, "staff_detail.html", {"StaffForm": StaffForm, "EmergencyFormSet": EmergencyFormSet})为什么这段代码得到的EmergencyFormSet会有几个空值
可能是因为员工对应的 Emergency 信息没有被创建或者被删除了,所以在 EmergencyFormSet 中会存在一些空值。可以在模板中判断是否存在 Emergency 信息,如果不存在则不显示对应的表单。另外,也可以在视图中加入判断逻辑,如果不存在对应的 Emergency 信息则创建一个空的 Emergency 对象,以保证 EmergencyFormSet 中不会出现空值。
def staff_detail(request, nid): """ 员工个人详情页面 """ staff_info = models.StaffInfo.objects.filter(RES_ID=nid).first() emergency_info = models.Emergency.objects.filter(res_id=nid).first() print(emergency_info) print(staff_info) StaffForm = StaffStaticModelForm(instance=staff_info) EmergencyForm = EmergencyStaticModelForm(instance=emergency_info) return render(request, "staff_detail.html", {"StaffForm": StaffForm, "EmergencyForm": EmergencyForm})这段代码目前能显示一条与StaffInfo关联的Emergency数据,如何得到所有关联的Emergency?
可以使用`ForeignKey`的`related_name`属性来获取所有关联的Emergency数据。在`StaffInfo`模型中,可以将`Emergency`模型的外键设置为`staff_info`,并给它设置一个`related_name`属性。然后在查询`StaffInfo`对象时,可以通过该属性来获取所有关联的`Emergency`对象。
具体实现代码如下:
```python
class StaffInfo(models.Model):
# ...
class Emergency(models.Model):
staff_info = models.ForeignKey(StaffInfo, related_name='emergency_list', on_delete=models.CASCADE)
# ...
def staff_detail(request, nid):
staff_info = models.StaffInfo.objects.filter(RES_ID=nid).first()
emergency_list = staff_info.emergency_list.all()
StaffForm = StaffStaticModelForm(instance=staff_info)
EmergencyFormset = modelformset_factory(Emergency, form=EmergencyStaticModelForm, extra=0)
EmergencyFormset = EmergencyFormset(queryset=emergency_list)
return render(request, "staff_detail.html", {"StaffForm": StaffForm, "EmergencyFormset": EmergencyFormset})
```
在`Emergency`模型中,设置`staff_info`为`StaffInfo`模型的外键,并设置`related_name`为`emergency_list`。在`staff_detail`视图函数中,使用`emergency_list`变量来获取所有关联的`Emergency`对象,并将其传递给`EmergencyFormset`。然后在模板中使用`{{ EmergencyFormset }}`来渲染所有的`Emergency`表单。