You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django通过URL主键筛选代理对应客户报id类型错误如何解决

问题原因

你在AgentClientListView的get_queryset方法中直接使用了未赋值的id变量,Python将其识别为内置的id()函数,不符合数据库主键字段需要的数值类型,因此抛出对应报错。同时你的客户筛选条件也和模型定义不匹配。

解决步骤

  1. 修正get_queryset方法,从类视图的self.kwargs属性中获取URL传递的代理主键值,同时调整客户筛选逻辑:
class AgentClientListView(OrganizerAndLoginRequiredMixin, generic.ListView):
    template_name = "agents/agent_client_list.html"
    context_object_name ="clients"

    def get_queryset(self):
        # 从URL参数中获取代理主键
        agent_pk = self.kwargs.get('pk')
        # 查询对应代理实例
        agent = Agent.objects.get(pk=agent_pk)
        # 按外键agent筛选该代理名下的客户
        queryset = Client.objects.filter(agent=agent).order_by('company_name')
        return queryset
  1. 补充上下文传递(解决前端模板读取agent变量的问题)
    你的前端模板需要展示代理的姓名信息,需要在视图中新增get_context_data方法,将代理实例传递到模板:
def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['agent'] = Agent.objects.get(pk=self.kwargs.get('pk'))
    return context

把上述方法追加到AgentClientListView类中即可。

  1. 清理URL配置(可选,避免后续冲突)
    你的urls.py中重复定义了两次agent-delete路由,建议删除重复的那条规则。

内容的提问来源于stack exchange,提问作者Tyrone Jasper Galang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 09:06:04