Here's an example:
If I have these classes
class Author(models.Model):
name = models.CharField(max_length=45)
class Book(models.Model):
name = models.CharField(max_length=45)
authors = models.ManyToManyField(Author)
In the database I have one Author with the name "George" and another one with the name "Georfe". The last one is a mistake. So what I want is in every Book that have "Georfe" as one of his Author replace it by the Author "George".
In SQL is really easy to do. If id of "George" = 3 and id of "Georfe" = 7 and the relation table name is "author_book":
UPDATE author_book SET id=3 WHERE id=7;
Is it possible to do that with the Django ORM?
I found a way to do it: I loop trough all the related Books of the mistyped author and do:
book.authors.add(Author.objects.get(id=3))
book.authors.remove(Author.objects.get(id=7))
But I don't find this solution really elegant and efficient. Is there a solution without the loop?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…