Parece que esto debería ser "fácil" o al menos documentado en alguna parte, simplemente no puedo encontrarlo.¿Agregar una tabla "directa" al campo django y migrar con el sur?
Digamos que tengo un modelo:
class A(models.Model):
users = models.ManyToMany('auth.User', blank=True)
Ahora quiero migrar a tener una mesa through
añadir campos a la relación ManyToMany ...
class AUsers(models.Model):
user = models.ForeignKey('auth.User')
a = models.ForeignKey('A')
new_field = models.BooleanField()
class A(models.Model):
users = models.ManyToMany('auth.User', blank=True, through='AUsers')
entonces yo:
% ./manage.py schemamigration app --auto
No es del todo sorprendente, me dice que va a dejar caer el auto creado originalmente a través de la tabla y crear uno nuevo para AUsers
. ¿Cuál es la mejor práctica en este punto? ¿Hay una forma decente de migrar a la nueva tabla through
? ¿Uso db_table
en Meta? ¿Simplemente no uso el through=...
de inmediato ... luego hago un schemamigration --auto
, luego un datamigration
para copiar la tabla actual (de alguna manera, no estoy seguro ...) y luego agrego la relación through
y dejo que mate la tabla?
¿Cuál es el truco aquí? ¿Es esto realmente tan difícil?
Sí, me preguntaba si era una migración manual obligatoria. Parece que ya que piensas lo mismo ... eso es correcto. El db_table es también algo que supongo que tendré que hacer también. Simplemente parece una pieza de "cruft" que solo existe debido a su historial de migración y no es necesaria ... pero supongo que eso es lo que haré. Voy a marcar aceptar si/cuando funciona. – dlamotte
También debe agregar un unique_constraint para que la migración sea "completa". Siento que esto fue un poco demasiado complicado ... ¿al menos más de lo necesario? Dejaré esto abierto durante unos días y veré si alguien tiene una solución mejor ... Me gustaría ver una ... ¿Tal vez tenga que hackear a South para agregarla en el futuro? – dlamotte
@dlamotte acaba de encontrarse con el mismo escenario yo mismo. Puedes (ahora, no sé de entonces) usar 'db.rename_table' para cambiar el nombre de la tabla a lo que quieras. – antitoxic