2013-03-26 80 views
9

Khi sử dụng DateTimeField trong ModelForm s, chúng trông giống như trường văn bản. Làm thế nào tôi có thể làm cho họ trông giống như trong admin? (Khi tôi đi đến admin và thêm một chương trình tôi thấy các trường như trường ngày)Trường Ngày giờ trong mô hình biểu mẫu Django

# models.py 
class Show(models.Model): 
    ... 
    start_time = models.DateTimeField("Event Time") 
    sale_end_time = models.DateTimeField("Sale End Time") 

class ShowForm(ModelForm): 

    class Meta: 
     model = Show 

# views.py 
def createshow(request): 
    if request.method == 'POST': 
     form = ShowForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/showsaved') 
    else: 
     form = ShowForm() 
     return render(request, 'BizCreateShow.html', {'ShowForm' : form}) 

Trong mẫu:

<form class="form-horizontal well" action="" method="post"> 
{% csrf_token %} 
    {{ ShowForm }} </br> 
    <input type="submit" value="Submit"> 
</form> 

Trả lời

9

Bạn có thể làm điều này với các widget django. Nó rất đơn giản và dễ thực hiện. Dưới đây là các chi tiết cách bạn có thể sử dụng điều này bằng cách sử dụng các widget.

trong forms.py

class ShowForm(ModelForm): 
    class Meta: 
     model = Show 
    def __init__(self, *args, **kwargs): 
     super(ShowForm, self).__init__(*args, **kwargs) 
     self.fields['start_time'].widget = widgets.AdminSplitDateTime() 
     self.fields['sale_end_time'].widget = widgets.AdminSplitDateTime() 

trong mẫu

<script type="text/javascript" src="/my_admin/jsi18n/"></script> 
<script type="text/javascript" src="/media/admin/js/core.js"></script> 

<link rel="stylesheet" type="text/css" href="/media/admin/css/forms.css"/> 
<link rel="stylesheet" type="text/css" href="/media/admin/css/base.css"/> 
<link rel="stylesheet" type="text/css" href="/media/admin/css/global.css"/> 
<link rel="stylesheet" type="text/css" href="/media/admin/css/widgets.css"/> 

Đây là nó. Xin vui lòng cho tôi biết nếu tôi không rõ ràng lắm. Hoặc bạn đang đối mặt với bất kỳ lỗi nào trong đó.

+0

Cảm ơn, khi tôi cố gắng mà tôi nhận được một lỗi: "Không xác định biến: widget" trên dòng này: self.fields [ 'start_time']. widget = widgets.AdminSplitDateTime() – misschoksondik

+4

thử này "từ django.contrib.admin nhập khẩu vật dụng" có thể nó sẽ giải quyết vấn đề của bạn. –

+1

Lưu ý rằng trong 1,4+ bạn gọi các tệp tĩnh khác nhau: http://stackoverflow.com/a/15292176/1863061 – Laci

3

Bạn có lẽ nên sử dụng một cái gì đó giống như jQuery UI của datepicker widget:

The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.

+0

Cảm ơn! nhưng làm thế nào tôi có thể cung cấp cho các lĩnh vực đầu vào một lớp hoặc ID để sử dụng trong javascript nếu hình thức tạo ra trong mô hình? – misschoksondik

+0

Ngoài ra, tôi cần thời gian trong cùng một lĩnh vực, phải không? Nó chỉ cho phép tôi chọn ngày. – misschoksondik

+0

Ok, tôi đã sử dụng $ ("form input [name = 'start_time']"). Click (function() { $ ("form input [name = 'start_time']"). Datepicker(); }); – misschoksondik

Các vấn đề liên quan