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

如何在Django中以字典键为动态字段名添加多对多字段值

解决方案

你的错误原因是直接调用了ManyToManyField字段对象的add方法,但add是多对多关联管理器的方法,并非字段对象本身的方法。你需要通过实例对象获取对应字段的关联管理器,而非从_meta中提取字段对象。

修改后的循环代码如下:

for key, val in device_dict.items():
    # 动态获取实例上的多对多字段管理器
    getattr(instance, key).add(val)

补充说明

  1. 请确保device_dict内的所有键都是ProductAttributes模型中定义的多对多字段名。如果字典中包含外键或普通字段(比如你的watch_connectivity看起来是整数类型字段),需要区分处理:
    from django.db import models
    
    for key, val in device_dict.items():
        field = instance._meta.get_field(key)
        if isinstance(field, models.ManyToManyField):
            getattr(instance, key).add(val)
        else:
            # 普通字段或外键直接赋值
            setattr(instance, key, val)
    # 普通字段赋值后需保存实例
    instance.save()
    
  2. 多对多字段调用add后无需额外执行instance.save(),关联管理器会直接操作中间表;但普通字段修改后必须调用save()才能将变更同步到数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:24:53