Nie mogę znaleźć odniesienia do konkretnego problemu w dokumentach lub w Internecie.Jak dodać opcję do istniejącego ManyToManyField z migracjami i danymi w django
Mam istniejącą wiele do wielu relacji.
class Books(models.Model):
name = models.CharField(max_length=100)
class Authors(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField(Books)
Dotyczy to migracji i danych. Teraz muszę użyć opcji through, aby dodać jedno dodatkowe pole w tabeli zawierające wiele do wielu relacji.
class Authorship(models.Model):
book = models.ForeignKey(Books)
author = models.ForeignKey(Authors)
ordering = models.PositiveIntegerField(default=1)
class Authors(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField(Books, through=Authorship)
Po uruchomieniu migracji django tworzy nową migrację do modelu Authorship
. Próbowałem ręcznie utworzyć plik migracji, dodając kolumnę ordering
w tabeli Authorship
i zmieniając kolumnę books
w tabeli Authors
, ale występują pewne problemy z migracją.
operations = [
migrations.AddField(
model_name='authorship',
name='ordering',
field=models.PositiveIntegerField(default=1),
),
migrations.AlterField(
model_name='authors',
name='books',
field=models.ManyToManyField(to='app_name.Books', through='app_name.Authorship'),
),
]
Podczas próby migracji, daje KeyError: ('app_name', u'authorship')
Założę istnieją inne rzeczy, które są dotknięte, a więc błędy.
Czego mi brakuje? Czy istnieje inne podejście do pracy z tym?
Będzie to wymagać migracji danych, w przeciwnym razie utracę istniejące dane, nie? – chhantyal
Tak, ponieważ usuniesz pole. Jeśli nie chcesz tracić danych, nie usuwaj 'książek', po prostu dodaj' książkę'. Następnie zmigruj dane z 'books' do' book' po prostu przez SQL. – pista329