Tengo dos tablas, News
y Files
:SQLAlchemy dependencia circular - cómo resolverlo?
# unrelated columns removed
class News(db.Model):
id = db.Column(db.Integer, primary_key=True)
file_id_logo = db.Column(db.Integer, db.ForeignKey('files.id'))
logo = db.relationship('File', lazy=False)
class File(db.Model):
id = db.Column(db.Integer, primary_key=True)
news_id = db.Column(db.Integer, db.ForeignKey('news.id'))
news = db.relationship('News', lazy=False, backref=db.backref('files'))
Después de añadir la tecla f file_id_logo
, sqlalchemy planteado una CircularDependencyError. Ya he intentado post_update=True
en la relación logo
, pero no ha cambiado nada.
¿Cuál es la forma correcta de resolver esto?
Los siguientes casos son posibles (en caso de que importe):
- Un archivo no tiene o tiene exactamente un Noticias asignado.
- Si un archivo no tiene noticias, tampoco hay noticias con este archivo al que se hace referencia como su logotipo.
- Puede haber múltiples archivos para una sola noticia, pero solo uno de estos archivos puede ser
logo
. - Así que si una noticia tiene un
logo
, el archivo al que se hace referencia también tiene esta noticia comonews
.
funcionó bien para deshacerse del error, pero se rompió algunas otras relaciones. Así que decidí simplemente deshacerme de ForeignKey. Aceptarlo de todos modos ya que la respuesta en sí es correcta. – ThiefMaster
@ThiefMaster Probablemente solo necesites establecer primaryjoin en tu relación: no pueden determinar la dirección de unión cuando hay múltiples relaciones/backrefs entre dos tablas. – letitbee
Encontré la información aquí: http://docs.sqlalchemy.org/en/rel_0_8/core/constraints.html –