django - 使用变量中的字段名称更新 django 中的多对多字段

标签 django django-models django-admin many-to-many

当字段名称存储在变量中时,我希望能够更新模型上的多对多字段。这对于普通字段(构造函数中带有 kwargs)甚至外键来说相对容易,但对于多对多字段则不然。情况如下:

class Book(models.Model):
    title = models.CharField(max_length=30)
    authors = models.ManyToManyField(Author)

field_name = 'title'
new = Book(**{field_name:'My Book'}) # This sets title to mybook
new.save()
my_authors = Author.objects.filter(name='Ben') # Get some authors
field_name = 'authors' 
new.XXXXXX = my_authors # Add them

我要问的是如何做 XXXXXX 位!它不像其他字段一样在 kwargs 中被接受,因为您首先需要一个主键,并且在保存它之前不会发生这种情况。有任何想法吗?非常感谢任何帮助!这一定是可能的 - django 管理员必须以某种方式做到这一点,但我找不到在哪里。

*编辑 - 我理想地寻找一个不使用 __getattribute 或 __setattr 的解决方案 - 尽管它们确实有效,但并不理想。另外,在执行此操作时我无法以任何方式更改模型,那是其他人的代码。谢谢!

谢谢大家。 本

最佳答案

阅读您的答案,我认为这就是您正在寻找的:

relation_name = 'authors'
new.__getattribute__(relation_name) = my_authors

没有参数化关系名称django n:m doc说:

new.authors = my_authors

关于django - 使用变量中的字段名称更新 django 中的多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360867/

相关文章:

django - 如何通过配置文件安全地部署环境设置?

python - Django REST 框架——如何将外键解析为实际值,而不是索引?

python - Django 过滤器排除外键

python - join() 参数必须是 str 或字节,而不是 'dict' -- 在 Django 中创建具有多表继承的表单

Django Admin - 特定用户(管理员)内容

python - django admin 内联多对多自定义字段

javascript - forms.DateInput 默认值

django - 在对基类进行查询后确定 Django 模型实例类型

Django在不知道/重置密码的情况下将站点视为管理员的另一个用户

django - 从查询集中获取唯一多对多记录的列表