Non riesco a trovare riferimenti a particolari problemi in documenti o online.Come aggiungere tramite l'opzione a ManyToManyField esistente con migrazioni e dati in django
Ho una relazione molti a molti esistente.
class Books(models.Model):
name = models.CharField(max_length=100)
class Authors(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField(Books)
Questo ha migrazioni e dati. Ora ho bisogno di usare attraverso l'opzione per aggiungere un campo in più nella tabella che contiene molte più relazioni.
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)
Quando eseguo le migrazioni, django crea una nuova migrazione per il modello Authorship
. Ho provato a creare manualmente il file di migrazione aggiungendo la colonna ordering
nella tabella Authorship
e modificando la colonna books
nella tabella Authors
ma ottengo alcuni problemi di migrazione.
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'),
),
]
Quando si tenta di migrare, dà KeyError: ('app_name', u'authorship')
Scommetto che ci sono altre cose che sono interessati e quindi gli errori.
Quali cose mi mancano? C'è qualche altro approccio per lavorare con questo?
Ciò richiederà la migrazione dei dati altrimenti perderò i dati esistenti, no? – chhantyal
Sì, poiché rimuoverai il campo. Se non vuoi perdere dati, non rimuovere 'books', basta aggiungere' book'. Quindi migrare i dati da 'libri' a' libro' semplicemente tramite SQL. – pista329