У меня есть одна таблица для хранения предметов вместе с их идентификаторами типов.(Я вынул не относящиеся к делу части.)
class Item(base):
__tablename__ = 'Item'
id = Column(Integer, primary_key = True, autoincrement = True)
_type_translations = relationship('TypeTranslations', collection_class = attribute_mapped_collection('language_code'))
type_name = association_proxy('_type_translations', 'translation', creator = lambda k, v: TypeTranslations(language_code = k, translation = v))
type_id = Column(Integer, nullable = False)
session.add_all([Item(type_id = 2), Item(type_id = 1)])
И затем я определяю таблицу, в которой я храню переводы для этих идентификаторов типов вместе с их языковым кодом и переводом:
class TypeTranslations(base):
__tablename__ = 'TypeTranslations'
id = Column(Integer, primary_key = True, autoincrement = True)
type_id = Column(Integer, nullable = False)
language_code = Column(String, nullable = False)
translation = Column(String, nullable = False)
А вот так выглядит таблица TypeTranslations:
id | type_id | language_code | translation
----+----------------+---------------+-------------
1 | 1 | en | Type1
2 | 2 | en | Type2
3 | 1 | es | Tipo1
4 | 2 | es | Tipo2
Моя проблема заключается в том, чтобы установить отношение для использования с collection_class и association_proxy, чтобы я мог получить вывод dict, например {'en:''Type1', 'es:' 'Tipo1'} при запросе Item.type_name мне понадобится ForeignKey / ForeignKeyConstraint.Однако type_id может повторяться в таблице Item, и, как я показал выше, type_id также может повторяться в таблице TypeTranslations, и тогда для этого потребуется уникальное ограничение, которого у меня нет ни в одной таблице.
Как я могу настроить это так, чтобы при запросе Item и доступе к его type_name я мог получить словарный вывод с переводами?Например, при запросе Item с type_id = 2 я получу {'en:' 'Type2', 'es:' 'Tipo2'} в качестве вывода?