Tengo un modelo sqlalchemy, donde la mayoría de las tablas/objetos tienen un campo de notas. Entonces, para intentar seguir el principio DRY, moví el campo a una clase mixin.sqlalchemy Mover columnas mixin al final
class NotesMixin(object):
notes = sa.Column(sa.String(4000) , nullable=False, default='')
class Service(Base, NotesMixin):
__tablename__ = "service"
service_id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String(255), nullable=False, index=True, unique=True)
class Datacenter(Base, NotesMixin):
__tablename__ = "datacenter"
datacenter_id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String(255), nullable=False, index=True, unique=True)
class Network(Base, NotesMixin, StatusMixin):
__tablename__ = "network"
network_id = sa.Column(sa.Integer, primary_key=True)
etc...
Ahora la columna de notas es la primera columna en el modelo/db. Sé que no afecta la funcionalidad de mi aplicación, pero me irrita un poco ver las notas antes de la identificación, etc. ¿Hay alguna manera de moverlo hasta el final?
Definitivamente prefiero la solución limpiadora ya que está integrada en sqlalchemy. Observé que el orden en el que heredas la mixin importa, si tienes múltiples mixins de base declarativa. Eso es de esperar, supongo. –
Hermosa solución, gracias! – sleepycal
Si bien esto requiere menos código, pero se siente un poco indirecto ya que utiliza una forma de "hackeo", es decir, un efecto secundario no intencionado de la restricción de clave externa para garantizar el orden. Prefiero la solución '_creation_order' porque esa es la forma prevista de ** EXPLICITAMENTE ** establecer el orden de creación de la columna, sin importar si es FK o no. – Devy