Django: использование перечислений для нескольких языковых таблиц и вариантов - PullRequest
0 голосов
/ 09 января 2019

Как использовать Enums в Django

  • для быстрого создания списка вариантов
  • для включения большего количества вариантов, чем парных кортежей, например 4 или 5 столбцов
  • быстрый метод преобразования перечислений в кортежи
  • для включения нескольких языков в выпадающем списке перечислений, список выбора повторно используется для других частей проекта, когда таблицы нуждаются в

1 Ответ

0 голосов
/ 09 января 2019

Формулировка вопроса также помогла выработать ответ.

Частично я хочу поделиться этим ответом для всех с похожим вопросом, касающимся использования перечислений и вариантов, частично спросить, не является ли решение по каким-либо причинам нежелательным или другие проблемы возникнут в дальнейшем (я думаю, реализовать его на более крупные (несколько тысяч строк кортежей).

Ниже код служит двум целям в моем проекте. 1. Создание таблицы, которая может вернуть ответ на выбранном языке. 2. Включить поле выбора из нескольких вариантов (несколько столбцов), например, для. цель отображения различных языков в раскрывающемся списке.

from enum import Enum

class MasterEnum(Enum):
    # object            # en        # de
    Product_HORSE   =   'horse',    'pferd'
    Product_CAR     =   'car',      'auto'
    Place_GARAGE    =   'garage',   'garage'
    Place_STABLE    =   'stable',   'stall'

class YNNeutralEnum(Enum):
    Yes             = 'Yes',        'Ja'
    No              = 'No',         'Nein'
    Neutral         = 'Neutral',    'Neutral'

class Wessen(Enum):
    W1              = 'Horse',      'Pferd'
    W555            = 'Manbearpig', 'MannBärSchwein'

class Lang():
    # column position in enum table
    en = 0
    de = 1

def ChoiceEnum(enum, Lang):
    return tuple((x.name, x.value[Lang]) for x in enum)

# testing
choices = ChoiceEnum(Wessen, Lang.en)
print(choices)
choices = ChoiceEnum(MasterEnum, Lang.de)
print(choices)
print(choices[1])
print(Wessen.W555.name)
print(Wessen.W555.value)
print(Wessen.W555.value[1])
...