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

Django外键实例错误:HTML表单提交无法赋值问题

Django外键存储实例错误解决方法

你的问题出在这两个核心点上:

  • 变量名混乱:你定义了user_dt但后续使用了未声明的user变量,还重复定义了client变量
  • 外键赋值错误:直接把POST传来的字符串ID传给外键字段,Django外键字段需要接收对应模型的实例对象,或者通过字段名_id的方式传入数字ID

修正后的views.py代码如下:

def add_contacts(request):
    if request.method == "POST":
        # 把POST中的ID字符串转为整数
        user_id = int(request.POST['user'])   
        client_id = int(request.POST['client'])
        name = request.POST['name']
        email = request.POST['email']
        phone = request.POST['phone']
        mobile = request.POST['mobile']
        role = request.POST['role']
        title = request.POST['title']
        
        # 方法1:用_id后缀直接传ID(推荐,查询更高效)
        data = Contacts.objects.create(
            user_id=user_id,
            client_id=client_id,
            name=name,
            email=email,
            phone=phone,
            mobile=mobile,
            role=role,
            title=title
        )
        
        # 方法2:先获取模型实例再赋值(如果需要用到实例其他属性时使用)
        # user = User.objects.get(id=user_id)
        # client = Client.objects.get(id=client_id)
        # data = Contacts.objects.create(
        #     user=user,
        #     client=client,
        #     name=name,
        #     ... 其他字段
        # )
        
        print(data)
        return redirect('contacts')

额外注意事项:

  • 要确保前端下拉框的选项值是对应User和Client的ID,比如<option value="{{ user.id }}">{{ user.username }}</option>
  • 建议添加异常处理,比如捕获ValueError(ID转整数失败)或User.DoesNotExist/Client.DoesNotExist(ID不存在的情况),避免程序崩溃

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:52:21