Mam dwie tabele, News
i Files
:SQLAlchemy circular dependency - jak go rozwiązać?
# 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'))
Po dodaniu file_id_logo
FKEY, sqlalchemy podniósł CircularDependencyError. Próbowałem już post_update=True
w relacji logo
, ale nic to nie zmieniło.
Jaki jest właściwy sposób rozwiązania tego problemu?
następujących przypadkach możliwe (w przypadku jest to ważne) są:
- Plik nie ma wpływu lub dokładnie jeden Aktualności przypisane.
- Jeśli plik nie zawiera żadnych wiadomości, nie ma również wiadomości z tym plikiem, do którego odnosi się logo.
- Może istnieć wiele plików dla pojedynczej wiadomości, ale tylko jeden z tych plików może być jego numerem
logo
. - Tak więc jeśli wiadomość ma numer
logo
, plik z odniesieniem ma tę wiadomość także jakonews
.
działało dobrze, aby pozbyć się tego błędu, ale złamał kilka innych relacji. Postanowiłem więc po prostu pozbyć się klucza obcego. Akceptacja tego mimo że sama odpowiedź jest poprawna. – ThiefMaster
@ ThiefMaster Prawdopodobnie wystarczy ustawić primaryjoin na swojej relacji - nie mogą określić kierunku łączenia, gdy istnieje wiele relacji/backrefów między dwiema tabelami. – letitbee
Znalazłem informacje tutaj: http://docs.sqlalchemy.org/en/rel_0_8/core/constraints.html –