Как использовать DateField в ArrayField в django
Я пытаюсь использовать ArrayField
в своей модели. У меня получается работать, например, с IntegerField
, но не с DateField
. Мне интересно, есть ли какое-то ограничение, о котором я не знаю, или в моем коде не хватает какого-то элемента, который мешает ему работать?
В моем models.py я добавил поле с
class Directive(models.Model):
id = models.AutoField(primary_key=True)
...
individual_dates = ArrayField(
models.DateField(auto_now_add=False, blank=True, default=date.today),
default=list,)
test = ArrayField(models.IntegerField(blank=True), default=list,)
...
и в моем файле forms.py у меня есть
class DirectiveForm(forms.ModelForm):
individual_dates = SimpleArrayField(
forms.DateField(), required=False,
help_text='comma separated list of dates',
widget=DatePickerInput(options={'format': 'DD.MM.YYYY'}))
test = SimpleArrayField(
forms.IntegerField(), required=False,
help_text='comma separated list of ints')
...
Сейчас,
- когда я ввожу в поле "тест" список целых чисел, разделенных запятыми, значения сохраняются в базе данных, как и ожидалось.
- когда я пытаюсь ввести несколько дат в поле "индивидуальные даты" с помощью DatePicker, каждый выбор перезаписывает предыдущий, и в итоге в базу данных сохраняется последний.
- когда я ввожу список дат вручную через запятую, в базу данных сохраняется только первая запись.
Но,
- когда я использую оболочку django, импортирую свою модель и пытаюсь ввести в нее даты, все работает, как и ожидалось:
>>> Directive.objects.create(individual_dates=[date(2024,2,2), date(2024,3,1), date(2024,4,6)])
>>> Directive.save()
>>> Directive.objects.last().individual_dates
[datetime.date(2024, 2, 2), datetime.date(2024, 3, 1), datetime.date(2024, 4, 6)]
Итак, что я делаю не так в моем forms.py (или в моем шаблоне?), что не позволяет ArrayField хранить все значения? Может быть, мне нужно настроить метод clean()
, чтобы он правильно учитывал даты? Но это не решит проблему с DatePicker...