Как сохранить введенный текст в виде списка в админке Django
Я пытаюсь работать с админкой Django. В частности, меня интересует CharField
, чтобы я получал вводимый текст от пользователя, обрабатывал его внутри модели и сохранял в виде массива в базу данных.
Итак, имея колонку базы данных origins_asns
в PostgreSQL, определенную как массив целых чисел
origin_asns BIGINT[] DEFAULT '{}',
Соответствующая модель должна выглядеть примерно так
class DynCdn(models.Model):
...
origin_asns = models.CharField(
verbose_name="Origin ASNs",
help_text="Hint: use a space ' ' character to enter multiple ASNs.",
max_length=64,
)
interfaces = ChoiceArrayField(
base_field=models.CharField(
max_length=64,
choices=DYNCDN_INTERFACES,
),
default=list,
)
...
def save(self, *args, **kwargs):
...
if self.origin_asns is not None:
self.origin_asns = [
int(_) for _ in self.origin_asns.split() if _.isdigit()
]
return super(DynCdn, self).save(*args, **kwargs)
...
<
Jun 08 10:21:33 __ registry[61043]: django.db.utils.DataError: malformed array literal: "[101, 202, 303]"
Jun 08 10:21:33 __ registry[61043]: LINE 1: ...2f5c910bfd4f'::uuid, 'JSHGSAVS', '101, 202, 303', '[101, 202...
Jun 08 10:21:33 __ registry[61043]: ^
Jun 08 10:21:33 __ registry[61043]: DETAIL: Missing "]" after array dimensions.
Похоже, что список приводится к строке. Не будете ли вы так добры, как решить эту проблему?
Имея ChoiceArrayField
определено так:
class ChoiceArrayField(ArrayField):
def formfield(self, **kwargs):
defaults = {
"form_class": forms.MultipleChoiceField,
"choices": self.base_field.choices,
}
defaults.update(kwargs)
return super(ArrayField, self).formfield(**defaults)
не поможет, поскольку выбор нельзя предложить заранее. Установка пакетов сторонних производителей не является предпочтительной.