Я придумал решение, которое работает, но не красиво. Я использовал пакет https://github.com/hzdg/django-enumfields , чтобы помочь с этим.
Я создал свое собственное поле формы:
class EnumChoiceField(enumfields.forms.EnumChoiceField):
def __init__(self, enum, *, coerce=lambda val: val, empty_value='', **kwargs):
if isinstance(enum, six.string_types):
self.enum = import_string(enum)
else:
self.enum = enum
super().__init__(coerce=coerce, empty_value=empty_value, **kwargs)
И использовал его в моей форме Django. Затем в моем собственном AppConfig я сделал это:
class CoreAppConfig(AppConfig):
name = 'myapp.core'
def ready(self):
registry = get_global_registry()
@convert_form_field.register(EnumChoiceField)
def convert_form_field_to_enum(field: EnumChoiceField):
converted = registry.get_converted_field(field.enum)
if converted is None:
raise ImproperlyConfigured("Enum %r is not registered." % field.enum)
return converted(description=field.help_text, required=field.required)
И, наконец, в моей схеме:
UnitEnum = Enum.from_enum(Unit)
get_global_registry().register_converted_field(Unit, UnitEnum)
Мне действительно это не нравится, но я не мог придумать лучшего способа чтобы справиться с этим. Я столкнулся с этой идеей при поиске другой проблемы с графеновым джанго здесь https://github.com/graphql-python/graphene-django/issues/481#issuecomment-412227036 .
Я чувствую, что у есть , чтобы быть лучшим способом сделать это.
Отправьте математическую проблему как ИЗОБРАЖЕНИЕ, вероятно, с круглой скобкой для ясности.
Просто явно видимый текст в изображении.
(2+5)*2
У меня был форум vBulletin, который получил тонны спама. Добавление одного дополнительного правила все исправило; позволяя людям вводить слово заглавными буквами. Поскольку наш веб-сайт называется TrefPuntMagic, они должны были ввести «TPM». Я знаю, что это не динамично, и если спамер действительно хочет спамить наш сайт, он может найти обходной путь, но мы лишь один из многих форумов vBulletin, на которые они нацелены, и это простое решение.