Làm cách nào để tạo mối quan hệ mà không có khóa ngoại?Xác định mối quan hệ không có khóa ngoài
@declared_attr
def custom_stuff(cls):
joinstr = 'foreign(Custom.name) == "{name}"'.format(name=cls.__name__)
return db.relationship('Custom', primaryjoin=joinstr)
Điều này đặt ra một lỗi:
ArgumentError: Could not locate any simple equality expressions involving locally mapped foreign key columns for primary join condition
này hoạt động, nhưng tôi nghĩ đó là một hack khá xấu xí.
@declared_attr
def custom_stuff(cls):
joinstr = 'or_(
and_(foreign(Custom.name) == MyTable.title,
foreign(Custom.name) != MyTable.title),
foreign(Custom.name) == "{name}")'.format(name=cls.__name__)
return db.relationship('Custom', primaryjoin=joinstr)
Có cách nào tốt hơn để thực hiện việc này không?
CHỈNH SỬA: thuộc tính bổ sung cần phải được thêm làm @declared_attr
và phải sử dụng mối quan hệ vì trình nối tiếp của chúng tôi được viết sao cho nó hoạt động với attrs được khai báo.
Làm điều này với @hybrid_property
hoặc một cái gì đó khác sẽ hoạt động, nhưng sau đó bộ nối tiếp json của chúng tôi sẽ bị hỏng. Việc đó có vẻ khó hơn việc xác định mối quan hệ.
Điều này không cung cấp câu trả lời cho câu hỏi. – SaeX