gpt4 book ai didi

python - 如何更新 Django 中的多对多字段?

转载 作者:IT老高 更新时间:2023-10-28 21:16:16 24 4
gpt4 key购买 nike

这是一个例子:

如果我有这些类(class)

class Author(models.Model):
name = models.CharField(max_length=45)

class Book(models.Model):
name = models.CharField(max_length=45)
authors = models.ManyToManyField(Author)

在数据库中,我有一个名为“George”的作者和另一个名为“Georfe”的作者。最后一个是错误的。所以我想要的是在每本以“Georfe”为作者之一的书中将其替换为作者“George”。

在 SQL 中真的很容易做到。如果“George”的id = 3,“Georfe”的id = 7,并且关系表名为“author_book”:

UPDATE author_book SET id=3 WHERE id=7;

用 Django ORM 可以做到这一点吗?

我找到了一种方法:我循环遍历输入错误作者的所有相关书籍并执行以下操作:

book.authors.add(Author.objects.get(id=3))
book.authors.remove(Author.objects.get(id=7))

但我不觉得这个解决方案真的很优雅和高效。有没有没有循环的解决方案?

最佳答案

注意:此代码将删除错误的“georfe”作者,并更新书籍以指向正确的作者。如果您不想这样做,请使用 .remove() 作为@jcdyer 的回答提及。

你可以这样做吗?

george_author = Author.objects.get(name="George")
for book in Book.objects.filter(authors__name="Georfe"):
book.authors.add(george_author.id)
book.authors.filter(name="Georfe").delete()

我怀疑如果你有一个明确的表加入两个模型(使用“通过”关键字 arg),这会更容易——在这种情况下,你可以直接访问关系表,并且可以做一个.update(id=george_author.id) 就可以了。

关于python - 如何更新 Django 中的多对多字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1194737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com