class FontStyle(IntFlag):
REGULAR = 1
BOLD = 2
ITALIC = 4
STRIKEOUT = 8
UNDERLINE = 16
@classmethod
def choices(cls):
return [(x.value, x.name) for x in cls]
...
style = models.PositiveSmallIntegerField('Стиль', choices=FontStyle.choices())
...
widgets = {'style': widgets.SelectMultiple(choices=FontStyle.choices())}
Я сделал поле модели enum-ом и вывел в админке как листбокс со множественным выбором, но при попытке сохранить модель мне пишет "Выберите корректный вариант. ['2', '4'] нет среди допустимых значений.". Насколько я понимаю он ожидает число, а на вход получает массив (что вообщем-то логично), но мне надо чтобы он этот массив как флаги сосквошил в одно значение, например 2|4 (FontStyle.BOLD | FontStyle.Italic).
Я пытался сам это реализовать переопределив этот виджет:
class SelectEnum(widgets.SelectMultiple):
def value_from_datadict(self, data, files, name):
result = super().value_from_datadict(data, files, name)
if isinstance(result, Iterable):
tmp = 0
for value in result:
tmp |= int(value)
return result
return int(result)
Но это почему-то не сработало - выдает ту же самую ошибку (хотя я вижу в дебаггере что он сюда заходит, нормально все рассчитывает и возвращает число).
Updated 21 Dec. 2017, 17:00 by DjNoobster.