Получение всех строк перевода из таблицы переводов на основе одной строки идентификатора таблицы - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть одна таблица для хранения предметов вместе с их идентификаторами типов.(Я вынул не относящиеся к делу части.)

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'} в качестве вывода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...