2009-08-06 26 views
8

Lời chào, Tôi đang cố gắng triển khai mô hình TimeField chỉ bao gồm định dạng HH: MM (tức là 16:46), tôi biết có thể định dạng đối tượng thời gian Python thông thường nhưng tôi bị mất về cách quản lý điều này với Django.Mô hình thời gian Django Không có giây

Chúc mừng

Trả lời

6

DateTime fields sẽ luôn lưu trữ giây; Tuy nhiên, bạn có thể dễ dàng nói với các mẫu để chỉ hiển thị giờ và phút, với bộ lọc time:

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

nơi "giá trị" là biến có chứa các lĩnh vực datetime.

Tất nhiên, bạn cũng có thể sử dụng các thủ thuật khác, như cắt giây ra khỏi trường khi đang lưu; nó sẽ đòi hỏi chỉ là một thay đổi nhỏ cho mã trong giao diện xử lý hình thức, để làm một cái gì đó như thế này:

if form.is_valid(): 
    instance = form.save(commit=False) 
    instance.nosecs = instance.nosecs.strptime(instance.nosecs.strftime("%H:%M"), "%H:%M") 
    instance.save() 

(lưu ý: đây là một mã xấu xí và chưa được kiểm tra, chỉ để cung cấp cho các ý tưởng)

Cuối cùng, bạn nên lưu ý rằng quản trị viên sẽ vẫn hiển thị giây trong trường.
Tuy nhiên, nó không phải là một mối quan tâm lớn, bởi vì admin chỉ nên được sử dụng bởi một loại người dùng có thể được hướng dẫn không sử dụng phần đó của trường.
Trong trường hợp bạn muốn vá cũng là quản trị viên, bạn vẫn có thể chỉ định tiện ích của riêng mình cho biểu mẫu và do đó có quản trị viên sử dụng nó. Tất nhiên, điều này có nghĩa là một nỗ lực bổ sung đáng kể.

+0

{{value | thời gian: "H: i"}} làm việc cho tôi. – GvS

+1

Trong cài đặt biểu mẫu của chế độ xem dựa trên lớp học của Django, TIME_INPUT_FORMATS trong cài đặt đã hoạt động đối với tôi. https://docs.djangoproject.com/en/dev/ref/settings/#time-input-formats – maciek

+0

@maciek: điều đó không hiệu quả đối với tôi. Đặt 'TIME_INPUT_FORMATS = [ '% H:% M', ]' trong 'settings.py' là không đủ. Tôi phải chỉ định widget. – SaeX

3

Vì vậy, tôi nghĩ rằng giải pháp đề xuất và được chấp nhận không phải là tối ưu bởi vì với:

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

Đối với một SplitDateTimeField trong trường hợp của tôi nhưng đối với bạn chỉ thay đổi nó để TimeWidget.

Hy vọng nó cũng sẽ giúp những người khác.

4

Tiện ích Django có thể được sử dụng để đạt được điều này một cách dễ dàng.

from django import forms 

class timeSlotForm(forms.Form): 
    from_time = forms.TimeField(widget=forms.TimeInput(format='%H:%M')) 
2

mô hình TimeField

trong Template

được hiển thị

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


là không được hiển thị

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

Django 1.4.1

1

Đối với một ModelForm, bạn có thể dễ dàng thêm một widget như thế này, để tránh những giây được hiển thị (chỉ hiển thị hh: mm):

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'), 
     } 
Các vấn đề liên quan