SqlAlchemy多语言支持
我有SqlAlchemy的下一个模型:SqlAlchemy多语言支持,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,我有SqlAlchemy的下一个模型: class Post(db.Model): __tablename__ = 'posts' post_id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime) # I dont want list of all title translations: titles = db.relationship("Content").
class Post(db.Model):
__tablename__ = 'posts'
post_id = db.Column(db.Integer, primary_key=True)
created_at = db.Column(db.DateTime)
# I dont want list of all title translations: titles = db.relationship("Content").
# How can I pass lang_code here for properly title value?
title = db.relationship("Content",
primaryjoin="and_(Content.post_id==Post.post_id,
Content.lang_code=='%s')" % lang_code, uselist=False)
class Content(db.Model):
__tablename__ = 'content'
content_id = db.Column(db.Integer, primary_key=True)
value = db.Column(db.String())
lang_code = db.Column(db.String(2)) # for ex: 'en', 'fr', 'de', 'ru'
post_id = db.Column(db.Integer, db.ForeignKey('posts.post_id'))
我想得到一篇包含“en”标题的文章,而不是我代码中所有翻译的列表。我想将lang_代码值传递给它,但我不知道如何传递。
并通过以下方式访问它:
result = Post.query.filter_by(author_id=1).pass_custom_var_to_all_posts_in_query(lang_code='en').paginate(page, 20, False)
或者,可能存在过滤子行的方法(并用当前语言显示一个标题,而不是所有标题的列表)我将与一起使用
您的模型有些返工:
class Post(Base):
__tablename__ = 'posts'
post_id = Column(Integer, primary_key=True)
name = Column(String)
created_at = Column(DateTime)
_titles = relationship(
"Content",
collection_class=attribute_mapped_collection("lang_code"),
)
titles = association_proxy(
'_titles', 'lang_code',
creator=lambda k, v: Content(lang_code=k, value=v),
)
class Content(Base):
__tablename__ = 'content'
content_id = Column(Integer, primary_key=True)
value = Column(String())
lang_code = Column(String(2)) # for ex: 'en', 'fr', 'de', 'ru'
post_id = Column(Integer, ForeignKey('posts.post_id'))
然后您可以创建Post
实例:
p = Post(
name="no english",
titles={
'de': 'liebe',
'es': 'amor',
},
)
session.add(p)
添加/更新是一个简单的操作,如p.titles['it']='amore'
,删除是del p.titles['it']
最后,使用过滤器查询具有特定语言翻译的标题
:
q = (
session.query(Post)
# .filter(Post.author_id == 1)
.filter(Post.titles.contains('en'))
)
我会用它
您的模型有些返工:
class Post(Base):
__tablename__ = 'posts'
post_id = Column(Integer, primary_key=True)
name = Column(String)
created_at = Column(DateTime)
_titles = relationship(
"Content",
collection_class=attribute_mapped_collection("lang_code"),
)
titles = association_proxy(
'_titles', 'lang_code',
creator=lambda k, v: Content(lang_code=k, value=v),
)
class Content(Base):
__tablename__ = 'content'
content_id = Column(Integer, primary_key=True)
value = Column(String())
lang_code = Column(String(2)) # for ex: 'en', 'fr', 'de', 'ru'
post_id = Column(Integer, ForeignKey('posts.post_id'))
然后您可以创建Post
实例:
p = Post(
name="no english",
titles={
'de': 'liebe',
'es': 'amor',
},
)
session.add(p)
添加/更新是一个简单的操作,如p.titles['it']='amore'
,删除是del p.titles['it']
最后,使用过滤器查询具有特定语言翻译的标题
:
q = (
session.query(Post)
# .filter(Post.author_id == 1)
.filter(Post.titles.contains('en'))
)
你可以用这个
此库将提供为每个模型创建转换表的功能,并获取本地化数据您可以使用此库
此库将提供为每个模型创建转换表的功能,并获取本地化数据1)您使用的数据库是什么?2) 当您进行查询时,是否只返回具有该语言标题翻译的帖子?例如,如果翻译不可用,则排除帖子?1)Postgresql 2)我希望返回所有具有正确翻译或默认语言(en)的帖子(如果翻译不可用1)您使用的数据库是什么?2) 当您进行查询时,是否只返回具有该语言标题翻译的帖子?例如,如果翻译不可用,则排除帖子?1)Postgresql 2)我希望返回所有具有正确翻译或默认语言(en)的帖子(如果翻译不可用)