ValueError: Cannot assign “1“: “Order.user_id“ must be a “UserInfo“ instance.

在Django中创建表单时遇到问题,当表单包含外键,尝试直接使用ID值填充外键字段会引发ValueError。解决方法是通过查询源表,将ID转换为对应的对象实例,例如使用`UserInfo.user_ma.filter(id=request.session[info][id]).first()`获取用户对象,然后赋值给`user_id`字段。
摘要由CSDN通过智能技术生成

项目场景:

django创建表外键后, 返回表单不包含外键内容,自行填充外键提示需要传入对象,不能传入值

问题描述

ValueError: Cannot assign "1": "Order.user_id" must be a "UserInfo" instance.


原因分析:

外键id直接通过session里面的id来获取 获取的对象为int值,并非对象


解决方案:

通过session中的id去源表获取对象,直接将对象传入

order.py

def order_add(request):
    form = OrderModelForm(data=request.POST)
    if form.is_valid():
        # 根据时间生成订单号 获取当前登录用户作为用户id
        form.instance.oid = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + str(random.randint(1000, 9999))
        form.instance.user_id = UserInfo.user_ma.filter(id=request.session['info']['id']).first()
        form.save()
        data = {"status": True}
        return HttpResponse(json.dumps(data))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值