2013-04-16 11 views
15

Tôi có một mô hình cho các sự kiện hầu như luôn bắt đầu lúc 10:00 tối, nhưng đôi khi có thể bắt đầu sớm hơn/muộn hơn. Để làm mọi thứ dễ dàng trong quản trị viên, tôi muốn thời gian mặc định là 10 giờ tối, nhưng có thể thay đổi nếu cần; ngày sẽ cần phải được đặt bất kể, do đó, nó không cần một mặc định, nhưng lý tưởng nó sẽ mặc định cho ngày hiện tại.Tôi có thể đặt thời gian mặc định cụ thể cho trường datetime Django không?

Tôi nhận ra rằng tôi có thể sử dụng datetime.now để thực hiện sau, nhưng có thể (và làm cách nào) để tôi đặt thời gian thành giá trị mặc định cụ thể không?

Cập nhật: Tôi nhận được câu trả lời nhanh hơn tôi có thể tìm ra (những) điều tôi đang cố gắng hoàn thành ... Có lẽ tôi nên tiếp tục với ứng dụng này trước khi tôi hỏi. Cảm ơn sự giúp đỡ trong thời gian chờ đợi!

+0

tôi nhận được 'Lỗi Loại: __init __() có một cuộc tranh cãi từ khóa bất ngờ 'mặc định''. Bất kỳ ý tưởng? Sử dụng một forms.Form thay vì một hình thức mô hình. forms.TimeField (mặc định = dt.time (16, 0), widget = forms.TimeInput) –

Trả lời

-1

Một cái gì đó như thế này?

import datetime 

dt = datetime.now() 
dt.hour = 22 
dt.minute = 0 
dt.second = 0 

Khó có thể cụ thể hơn nếu không có ngữ cảnh.

+0

Tôi không chắc chắn bối cảnh nào tôi có thể đưa ra; Tôi chỉ muốn người nhập ngày vào không phải thay đổi nó thành 10:00 mỗi lần họ thêm một sự kiện mới (nhưng vẫn có tùy chọn để thay đổi nó). Giải pháp được thừa nhận là đơn giản nếu có; có vẻ như nó có thể hoạt động. – lisaq

11

Từ các tài liệu Django cho Field.default:

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

Vì vậy, làm như sau:

from datetime import datetime, timedelta 

def default_start_time(): 
    now = datetime.now() 
    start = now.replace(hour=22, minute=0, second=0, microsecond=0) 
    return start if start > now else start + timedelta(days=1) 

class Something(models.Model): 
    timestamp = models.DateTimeField(default=default_start_time) 
+1

Tôi thích cách ví dụ này sử dụng "ngày mai lúc 10 giờ tối" nếu phiên bản mẫu được tạo sau 10 giờ tối. – gldnspud

+0

khi bạn đang sử dụng 'datetime.now()' thay vì 'datetime.now'' now' sẽ là ngày cố định, khi được đánh giá lần đầu tiên. Điều đó nghĩa là gì? Khi máy chủ của bạn chạy yếu, với 'datetime.now()', nó sẽ luôn là ngày máy chủ được khởi động. Với việc sử dụng 'datetime.now', nó sẽ được đánh giá năng động. – Asqiir

+0

là có thể chỉ hiển thị giờ và phút khi được hiển thị trên màn hình thay vì hiển thị giờ phút và mili giây. và thay vì sử dụng thời gian quân sự, hãy dùng am và pm ... bởi vì với những gì bạn có ở trên nó cho thấy toàn bộ thời gian. –

6

trong trường hợp bạn đang quan tâm vào thiết lập giá trị mặc định TimeField: https://code.djangoproject.com/ticket/6754

không:

start = models.TimeField(default='20:00') 

làm thay vì:

import datetime 
start = models.TimeField(default=datetime.time(16, 00)) 
+1

Không chắc chắn lý do tại sao bạn muốn bao gồm datetime.datetime trong một 'TimeField'. Tốt hơn nên làm 'start = models.TimeField (mặc định = datetime.time (16, 00))' – SaeX

+0

@SaeX ty, đã sửa nó. –