Я хотел бы принять строки естественного языка в поле DateTime в форме, сгенерированной Django ModelForm. Я нашел Converting string into datetime, в котором объясняется, как преобразовать входную строку в объект DateTime. (В этом случае я использую timestring для преобразования вместо strptime, как это предложено в ответах, потому что я хочу обрабатывать ввод как «завтра».) Но я не могу понять, где этот код должен быть помещен внутри код ModelForm. Если код преобразования размещен в form_valid
, он никогда не запускается, потому что is_python
работает первым и жалуется, что ввод текста не является DateTime. Когда я переопределяю is_python
, я получаю сообщение об ошибке, которое, я думаю, происходит из какого-то рекурсивного цикла.Преобразование строки в datetime в модель модели Django
Соответствующий код:
models.py
class Widget(models.Model):
name = models.CharField(max_length=100)
widget_date = models.DateTimeField
forms.py
from timestring import Date
class NaturalDateField(forms.DateField):
def to_python(self, value):
if not value:
return none
return Date(value, tz=timezone.get_current_timezone())
class WidgetForm(forms.ModelForm):
widget_date = NaturalDateField()
class Meta:
model = Widget
fields = ['name', 'widget_date']
views.py
class WidgetUpdate(UpdateView):
model = Widget
form_class = WidgetForm
Ошибка при отправке - Invlid date string >>
. Трассировка кода показывает, что исходная строка ввода преобразуется правильно (например, «2014-12-26 00: 00: 00-08: 00»), но затем функция validate() из пакетов site-packages/django/forms/fields .py запускается, и по какой-то причине возвращается в пакет timestring и пытается запустить def __eq__(self, other):
из Date.py, который, как я думаю, пытается запустить Date (другое), который терпит неудачу, поскольку другой пуст.
Каков наилучший способ принять текстовую строку в ModelForm, а затем преобразовать ее в полевую строку, такую как DateTime, которая будет сохранена в базе данных?
Что такое 'date' в вашем' методе to_python'? –
Дата - класс разбора на естественном языке из Timestring. Добавлен импорт для показа. –