Oto przykład:Jak zaktualizować pole manytomany w Django?
Jeśli mam tych klas
class Author(models.Model):
name = models.CharField(max_length=45)
class Book(models.Model):
name = models.CharField(max_length=45)
authors = models.ManyToManyField(Author)
W bazie danych mam jednego autora o nazwie „George” a drugi o nazwie „Georfe”. Ten ostatni to błąd. Tak więc chcę w każdej Księdze, która ma "Georfe" jako jeden z jego autorów, zastąpić ją autorem "George".
W języku SQL jest naprawdę łatwa do zrobienia. Jeśli id = "George" i 3 "Georfe id" = 7 i nazwa tabeli relacja jest "author_book":
UPDATE author_book SET id=3 WHERE id=7;
Czy to możliwe, aby to zrobić z Django ORM?
znalazłem sposób, aby to zrobić: I pętla koryta wszystkie związane z ksiąg literówka autora i zrobić:
book.authors.add(Author.objects.get(id=3))
book.authors.remove(Author.objects.get(id=7))
Ale nie uważam to rozwiązanie naprawdę elegancki i skuteczny. Czy istnieje rozwiązanie bez pętli?
Jeśli jest to jednorazowa okazja do naprawienia niektórych literówek, dlaczego nie uruchomić po prostu surowego kodu SQL? – thedz
Dane w bazie danych pochodzą ze starej bazy danych plików i istnieje wiele literówek do naprawienia. Nie chcę samodzielnie naprawiać wszystkich literówek. Chciałbym, żeby mój klient mógł to zrobić w interfejsie administratora. – Etienne