如何在Django中以编程方式自动设置多对多字段的值
Django多对多字段通用设置方法
直接通过getattr获取多对多字段的关联管理器,再调用它的set()方法即可,不用重复编写冗余代码。
实现代码如下:
def set_m2m_values(blog, field_name, new_values): # 获取对应多对多字段的关联管理器 m2m_manager = getattr(blog, field_name) # 调用set方法设置新值 m2m_manager.set(new_values)
为什么之前的方法无效?
因为Django模型的多对多字段,在实例上对应的是RelatedManager对象,不是普通的属性值,直接用setattr赋值会触发Django的字段校验,提示必须使用set()方法来更新关联数据。
使用示例
比如给blogPost的authors字段设置值:
# 假设已经获取到目标作者的QuerySet target_authors = Author.objects.filter(id__in=[1, 3, 5]) # 调用通用函数设置 set_m2m_values(your_blog_post_instance, 'authors', target_authors)
同样的,给reviewers或tags字段赋值时,只需要替换第二个参数为对应的字段名即可。
内容的提问来源于stack exchange,提问作者Alexc957
相关产品推荐
相关产品推荐

