I'm trying to modify a M2M field to a ForeignKey field. The command validate shows me no issues and when I run syncdb :
ValueError: Cannot alter field xxx into yyy they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields)
So I can't make the migration.
class InstituteStaff(Person): user = models.OneToOneField(User, blank=True, null=True) investigation_area = models.ManyToManyField(InvestigationArea, blank=True,) investigation_group = models.ManyToManyField(InvestigationGroup, blank=True) council_group = models.ForeignKey(CouncilGroup, null=True, blank=True) #profiles = models.ManyToManyField(Profiles, null = True, blank = True) profiles = models.ForeignKey(Profiles, null = True, blank = True)
This is my first Django project so any suggestions are welcome.
makemigrations is responsible for packaging up your model changes into individual migration files - analogous to commits - and migrate is responsible for applying those to your database.
migrate executes those SQL commands in the database file. So after executing migrate all the tables of your installed apps are created in your database file. You can confirm this by installing SQLite browser and opening db.
I stumbled upon this and although I didn't care about my data much, I still didn't want to delete the whole DB. So I opened the migration file and changed the AlterField()
command to a RemoveField()
and an AddField()
command that worked well. I lost my data on the specific field, but nothing else.
I.e.
migrations.AlterField( model_name='player', name='teams', field=models.ManyToManyField(related_name='players', through='players.TeamPlayer', to='players.Team'), ),
to
migrations.RemoveField( model_name='player', name='teams', ), migrations.AddField( model_name='player', name='teams', field=models.ManyToManyField(related_name='players', through='players.TeamPlayer', to='players.Team'), ),
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With