Error - django.db.migrations.exceptions.CircularDependencyError: accounts.0001_initial, songs.0001_initial
Tengo dos cuentas de aplicaciones y canciones. Las canciones tienen dos archivos modelo: models.py y song_metadata_models.py
accounts/models.py
class AppUser(models.Model): user = models.OneToOneField(User) user_languages = models.ManyToManyField('songs.SongLang') user_genres = models.ManyToManyField('songs.SongGenre') def __str__(self): return self.user.username~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
songs/song_metadata_models.py
class SongGenre(models.Model): short_name = models.CharField(max_length=10) full_name = models.CharField(max_length=100) def __str__(self): return self.full_name class SongLang(models.Model): short_name = models.CharField(max_length=10) full_name = models.CharField(max_length=100) def __str__(self): return self.full_name~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
songs/models.py
class Song(models.Model): # Fields name = CharField(max_length=255) slug = AutoSlugField(populate_from='name', blank=True) created = DateTimeField(auto_now_add=True, editable=False) last_updated = DateTimeField(auto_now=True, editable=False) url = CharField(max_length=100) artist = CharField(max_length=50) album = CharField(max_length=50) like = BooleanField(default=False) dislike = BooleanField(default=False) # Relationship Fields requested_by = ForeignKey('accounts.AppUser', related_name='song_requested_by') dedicated_to = ManyToManyField('accounts.AppUser', null = True, blank = True,related_name='song_dedicated_to') recommended_to = ManyToManyField('accounts.AppUser', null = True, blank = True,related_name='song_recommended_to')¿Cómo resolver esto? No hay dependencia circular a nivel de modelos, entonces ¿por qué este problema?
Solución 1: mueva many2many de AppUser a SongLang y SongGenre. Una relación m2m es simétrica de manera predeterminada, por lo que puede declararla en cualquier lado de la relación (nota: solo asegúrese de configurar el nombre relacionado con la forma en que se nombraron sus campos en el modelo related_name ).
Solución 2: mueva sus modelos SongGenre y SongLang a una tercera aplicación (la solución canónica a las dependencias circulares)
Solución 3: finalmente intente crear primero el modelo AppUser sin los campos m2m, cree la migración inicial y luego agregue los campos m2m (aunque no estoy seguro de que funcione).