2012-07-08 28 views
6

Tôi đã lập mô hình một lớp có tên ConversationHistory. Bất cứ khi nào một cá thể được tạo, tôi muốn đặt ngày hiện tại và thời gian hiện tại.Làm thế nào để mô hình hóa một TimeField ở Django?

class ConversationHistory(models.Model): 
    contact_date  = models.DateField(_(u"Conversation Date"),  blank=True) 
    contact_time  = models.DateTimeField(_(u"Conversation Time"), blank=True) 

    def __init__(self, *args, **kwargs): 
     super(ConversationHistory, self).__init__(*args, **kwargs) 
     self.contact_date = datetime.datetime.now() 
     self.contact_time = datetime.datetime.now() 

Ý tưởng là sau này người dùng vẫn có thể điều chỉnh ngày và giờ thành hai trường khác nhau.

Tôi hiện đã mất một chút cách chỉ tạo trường thời gian để hiển thị và chấp nhận thời gian, thay vì ngày và giờ. Tôi không thể có một trường thời gian mà không có datetime, nhưng sau đó làm thế nào tôi sẽ chỉ hiển thị thời gian trong biểu mẫu?

+4

Có một [TimeField] (https://docs.djangoproject.com/en/dev/ref/models/fields/#timefield) –

+1

ở dạng của bạn, bạn sẽ có thể định dạng lĩnh vực này như [ contact_time.strftime ("% H:% M")] (http://docs.python.org/library/time.html#time.strftime) –

+0

@ César có điều đó sẽ làm điều đó. :) Chỉ cần một điều cuối cùng, để loại bỏ các giây, tôi cần phải làm điều đó trong khai báo widget mẫu? – Houman

Trả lời

10

Nếu bạn muốn chỉ có thời gian, TimeField là những gì bạn cần:

class ConversationHistory(models.Model): 
    contact_date = models.DateField(_(u"Conversation Date"), blank=True) 
    contact_time = models.TimeField(_(u"Conversation Time"), blank=True) 

Bạn có thể tận dụng lợi thế của các tùy chọn auto_now_add:

lớp TimeField ([auto_now = False, auto_now_add = False, ** tùy chọn])

Thời gian, được biểu diễn bằng Python bởi một phiên bản datetime.time. Chấp nhận các tùy chọn tự động dân số như DateField .

Nếu bạn sử dụng auto_now_add, nó sẽ tự động đặt trường cho đến khi đối tượng được tạo lần đầu tiên.

class ConversationHistory(models.Model): 
    contact_date = models.DateField(_(u"Conversation Date"), auto_now_add=True, blank=True) 
    contact_time = models.TimeField(_(u"Conversation Time"), auto_now_add=True, blank=True) 
+0

Thats rất gọn gàng với auto_now_add. Điều đó có nghĩa là tôi thậm chí không cần phải làm điều đó bằng tay trong ctor nữa? tốt đẹp – Houman

+1

Tôi điều bạn nên sử dụng mặc định = datetime.datetime.now thay vì auto_now_add, vấn đề là bạn không thể ghi đè auto_now_add – armonge

+0

Tôi chỉ nhận ra rằng tôi thậm chí không thể có thiết lập bên trong constructor của mô hình. Vì ngay cả việc chỉnh sửa các mục luôn hiển thị ngày giờ hiện tại. Tôi cần thiết lập điều này trong khung nhìn khi chỉ tạo một cá thể mới. – Houman

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