Ответ 1
Я думаю, что лучшая реализация может измениться в зависимости от вашей цели, и мой ответ здесь может не соответствовать вашим потребностям.
Для класса Language
я бы предпочел не использовать datastore для этой цели. Я бы использовал babel.Locale
для определения отображаемых имен.
Как сказал Тим в комментарии, я предпочитаю использовать код языка в качестве ключа сущности. Ниже приведен пример реализации Tag
, предполагая, что каждому Tag
нужен urlsafe slug.
def get_urlsafe_slug_from_tag(tag_text):
# ...
# ...
class Slug(ndb.Model):
# use urlsafe slug as the key_name
# You can optionally use the property bellow.
available_translations = ndb.StringProperty(repeated=True)
class Tag(ndb.Model):
# use language code as the key_name
text = ndb.TextProperty()
Когда новый тэг создается, я создам два объекта; a Slug
с уникальной строкой urlsafe (slug) для этого тега в качестве ключа, а также объект Tag
с кодом языка в качестве ключа и этим объектом Slug
в качестве родительского элемента.
В этом примере есть свойство с именем available_translations, которое позволит вам вести переговоры с выбором языка пользователя и даже выполнять запрос, который будет возвращать Slugs с переводом на указанный язык (например, список Slugs с японским переводом).
Для проверки WTForm вы можете рассказать мне, как вы хотите проверить данные публикации? Я думаю, что вы сможете получить лучший ответ, если будете делиться своими подробными потребностями.