我有一张桌子来存储项目及其类型ID。 (我删除了不相关的部分。)
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)])
然后我定义一个表,在其中存储这些类型ID的翻译以及它们的语言代码和翻译:
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一起使用的关系,以便在查询Item时可以得到类似{'en:''Type1','es:''Tipo1'}的dict输出。 type_name我需要一个ForeignKey / ForeignKeyConstraint。但是,type_id可以在Item表中重复,并且如我上面所示,type_id也可以在TypeTranslations表中重复,然后需要一个唯一的约束,这在两个表中都没有。
我该如何设置它,以便在查询Item并访问它的type_name时,可以获得包含翻译的词典输出?例如,当查询type_id = 2的商品时,我会得到{'en:''Type2','es:''Tipo2'}作为输出?