Приветствую, я пытаюсь реализовать модель TimeField, которая состоит только из формата ЧЧ:ММ (т.е. 16:46). Я знаю, что можно отформатировать обычный объект времени Python, но я не понимаю, как управлять этим с помощью Django.
Ваше здоровье
Приветствую, я пытаюсь реализовать модель TimeField, которая состоит только из формата ЧЧ:ММ (т.е. 16:46). Я знаю, что можно отформатировать обычный объект времени Python, но я не понимаю, как управлять этим с помощью Django.
Ваше здоровье
Поля DateTime всегда будут храниться также секунды; однако вы можете легко настроить шаблон так, чтобы он просто отображал часы и минуты с помощью фильтра time
:
{{ value|time:"H:M" }}
где «значение» — это переменная, содержащая поле даты и времени.
Конечно, можно прибегнуть и к другим хитростям, вроде вырезания секунд из поля при сохранении; потребуется лишь небольшое изменение кода в представлении, обрабатывающем форму, чтобы сделать что-то вроде этого:
if form.is_valid():
instance = form.save(commit=False)
instance.nosecs = instance.nosecs.strptime(instance.nosecs.strftime("%H:%M"), "%H:%M")
instance.save()
(примечание: это уродливый и непроверенный код, просто чтобы дать представление!)
Наконец, вы должны отметить, что администратор по-прежнему будет отображать секунды в поле.
Это не должно быть большой проблемой, потому что администратор должен использоваться только тем типом пользователей, которым можно дать указание не использовать эту часть. поля.
Если вы хотите исправить также администратора, вы все равно можете назначить свой собственный виджет для формы и, таким образом, позволить администратору использовать его. Конечно, это означало бы значительные дополнительные усилия.
TIME_INPUT_FORMATS = [ '%H:%M', ]
в settings.py
было недостаточно. Пришлось указать виджет.
- person SaeX; 20.10.2015
Для этого можно легко использовать виджет Django.
from django import forms
class timeSlotForm(forms.Form):
from_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M'))
Поэтому я думаю, что предложенное и принятое решение не является оптимальным, потому что с:
datetime.widget = forms.SplitDateTimeWidget(time_format=('%H:%M'))
Для SplitDateTimeField в моем случае, но для вас измените его только на TimeWidget.
Надеюсь, это поможет и другим людям.
Модель TimeField
в шаблоне
Отображается
{{ value|time:"H:i" }}
Не отображается
{{ value|time:"H:M" }}
Джанго 1.4.1
Для ModelForm
вы можете легко добавить такой виджет, чтобы секунды не отображались (просто покажите чч:мм):
class MyCreateForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('time_in', 'time_out', )
widgets = {
'time_in': forms.TimeInput(format='%H:%M'),
'time_out': forms.TimeInput(format='%H:%M'),
}
По крайней мере, вы можете изменить вывод метода __str__
в модели, используя datetime.time.isoformat(timespec='minutes')
, например так:
def __str__(self):
return self.value.isoformat(timespec='minutes')
Теперь значение отображается как ЧЧ:ММ на страницах администратора.
В Django 1.9 должен работать следующий формат:
{{ yourData.value|time:"H:i" }}
В Django есть целый набор шаблонных тегов и фильтров.
Документация Django 1.9 по этому поводу:
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#time