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
相关产品推荐
相关产品推荐

