【发布时间】:2010-11-14 17:59:27
【问题描述】:
这是一个例子:
如果我有这些课程
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))
但我并不觉得这个解决方案非常优雅和高效。有没有没有循环的解决方案?
【问题讨论】:
-
如果这是修复一些错别字的一次性交易,为什么不直接运行原始 SQL?
-
数据库中的数据来自旧的 filemaker 数据库,有很多错别字需要修复。我不想自己修复所有的错别字。我希望我的客户可以在管理界面中做到这一点。