在另一视图展示字段数据时遇KeyError:list_id问题求助
问题解决方案
1. 修复KeyError: "list_id"错误
这个报错的核心原因是你当前用的ListListView是列表页视图,URL配置里没有传递list_id参数到视图的kwargs中,直接取self.kwargs["list_id"]自然会找不到键值。
两种修正方向:
如果是在列表页展示每个
HBTYList关联的HBTYItem的created_date:
不需要在get_context_data里提前批量查询数据,直接在模板中通过模型关联关系获取。假设HBTYItem的hbty_cust_id是外键关联到HBTYList,模板代码可以这么写:{% for obj in object_list %} <tr> <!-- 展示HBTYList自身字段 --> <td>{{ obj.id }}</td> <!-- 展示关联的HBTYItem的created_date,根据实际关联关系调整,比如取第一个关联项 --> <td>{{ obj.hbtyitem_set.first.created_date|date:"Y-m-d H:i:s" }}</td> </tr> {% endfor %}同时删除
get_context_data里的context['dc'] = ...这一行。如果是误将列表页当成详情页,想展示单个
HBTYList的关联数据:
把视图改成DetailView,同时修改URL配置添加list_id参数:# urls.py 示例 path('list/<int:list_id>/', ListDetailView.as_view(), name='list-detail'),视图代码调整为:
class ListDetailView(DetailView): model = HBTYList template_name = "accounts/modals/nomodal/detail.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 此时self.kwargs["list_id"]能正确获取URL传递的参数 context['dc'] = HBTYItem.objects.filter(hbty_cust_id=self.kwargs["list_id"]) return context
2. 确保created_date字段正常展示
- 先确认模型中存在
created_date字段,且类型正确:# models.py 示例 class HBTYList(models.Model): created_date = models.DateTimeField(auto_now_add=True) # 其他字段 class HBTYItem(models.Model): hbty_cust_id = models.ForeignKey(HBTYList, on_delete=models.CASCADE) created_date = models.DateTimeField(auto_now_add=True) # 其他字段 - 模板中展示时,可通过Django过滤器格式化日期:
{{ obj.created_date|date:"Y-m-d H:i:s" }}
3. 优化过滤功能的代码
当前get_context_data里重复实例化过滤器可以简化,直接复用get_queryset的结果:
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['filter'] = HbtyCustomerListFilter(self.request.GET, queryset=self.get_queryset()) return context
内容的提问来源于stack exchange,提问作者d3vkidhash
相关产品推荐
相关产品推荐

