Модель Django TimeField без секунд - PullRequest
8 голосов
/ 06 августа 2009

Привет, Я пытаюсь реализовать модель TimeField, которая состоит только из формата HH: MM (то есть 16:46), я знаю, что возможно отформатировать обычный объект времени Python, но я теряюсь в том, как управлять этим с помощью Django.

Приветствия

Ответы [ 7 ]

6 голосов
/ 18 апреля 2012

Виджет Django может быть использован для достижения этой цели легко.

from django import forms

class timeSlotForm(forms.Form):
    from_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M'))
6 голосов
/ 07 августа 2009

Поля 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()

(примечание: это уродливый и непроверенный код, просто чтобы дать идею!)

Наконец, вы должны заметить, что администратор по-прежнему будет отображать секунды в поле.
Однако это не должно вызывать особого беспокойства, поскольку администратором должны пользоваться только те пользователи, которым можно запретить использовать эту часть поля.
В случае, если вы хотите исправить также администратора, вы все равно можете назначить свой виджет для формы, и, таким образом, администратор использует его. Конечно, это означало бы значительные дополнительные усилия.

4 голосов
/ 17 июня 2011

Так что я думаю, что предложенное и принятое решение не является оптимальным, потому что с:

    datetime.widget = forms.SplitDateTimeWidget(time_format=('%H:%M'))

Для SplitDateTimeField в моем случае, но для вас только измените его на TimeWidget.

Надеюсь, это поможет и другим людям.

2 голосов
/ 28 мая 2013

модель TimeField

в шаблоне

Отображается

{{ value|time:"H:i" }}

1010 *
*

Не отображается

{{ value|time:"H:M" }}

Джанго 1.4.1

1 голос
/ 20 октября 2015

Для 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'),
        }
0 голосов
/ 14 ноября 2018

Вы можете по крайней мере изменить вывод в методе __str__ на модели, используя datetime.time.isoformat(timespec='minutes'), например:

def __str__(self):
    return self.value.isoformat(timespec='minutes')

Теперь значение отображается как ЧЧ: ММ на страницах администратора.

0 голосов
/ 19 октября 2016

На Django 1.9 должен работать следующий формат:

{{ yourData.value|time:"H:i" }}

Django имеет целый набор шаблонных тегов и фильтров.

Документация Django 1.9 на это:

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#time

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...