ใน django - มีฟิลด์การประทับเวลาเริ่มต้นสำหรับวัตถุทั้งหมดหรือไม่ นั่นคือฉันต้องประกาศฟิลด์ 'การประทับเวลา' อย่างชัดเจนสำหรับ 'สร้างเมื่อ' ในโมเดลของฉันหรือมีวิธีที่จะทำให้สิ่งนี้เป็นไปโดยอัตโนมัติ?
ใน django - มีฟิลด์การประทับเวลาเริ่มต้นสำหรับวัตถุทั้งหมดหรือไม่ นั่นคือฉันต้องประกาศฟิลด์ 'การประทับเวลา' อย่างชัดเจนสำหรับ 'สร้างเมื่อ' ในโมเดลของฉันหรือมีวิธีที่จะทำให้สิ่งนี้เป็นไปโดยอัตโนมัติ?
คำตอบ:
ไม่มีสิ่งนั้นตามค่าเริ่มต้น แต่การเพิ่มสิ่งนั้นทำได้ง่ายมาก เพียงใช้auto_now_add
พารามิเตอร์ในDateTimeField
คลาส:
created = models.DateTimeField(auto_now_add=True)
คุณยังสามารถใช้auto_now
สำหรับฟิลด์ "อัปเดตเมื่อ" ตรวจสอบการทำงานของที่นี่auto_now
สำหรับauto_now_add
ที่นี่ .
โมเดลที่มีทั้งสองช่องจะมีลักษณะดังนี้:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
โดยอัตโนมัติไม่ได้ดูเหมือนสิ่งที่ django จะทำโดยค่าเริ่มต้น จะไม่บังคับให้คุณต้องมีการประทับเวลา
ฉันจะสร้างคลาสพื้นฐานที่เป็นนามธรรมและสืบทอดโมเดลทั้งหมดจากมันหากคุณไม่ต้องการลืมเกี่ยวกับการประทับเวลา / ชื่อฟิลด์ ฯลฯ
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
ดูเหมือนจะไม่ค่อยนำเข้าwherever.TimeStampedModel
แทนdjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
และ updated
นี่เป็นวิธีที่ดีในการทำอย่างสะอาด
หากคุณใช้django-extensions (ซึ่งเป็นแอพที่ดีสำหรับการเพิ่มฟังก์ชันให้กับตัวช่วยบรรทัดคำสั่ง django-admin.py) คุณสามารถรับฟิลด์โมเดลเหล่านี้ได้ฟรีโดยรับช่วงจากTimeStampedModelหรือใช้ฟิลด์ TimeStamp ที่กำหนดเอง
คุณสามารถลองdjango-extensions
หากคุณต้องการใช้แบบจำลองนามธรรมประทับเวลา
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
มันมีแบบจำลองนามธรรมอื่น ๆ คุณสามารถใช้มันได้เช่นกัน
หากคุณต้องการแก้ไขฟิลด์นี้ให้ตั้งค่าต่อไปนี้แทน auto_now_add=True:
สำหรับวันที่
from datetime import date
models.DateField(default=date.today)
สำหรับ DateTime
from django.utils import timezone
models.DateTimeField(default=timezone.now)
ฉันคิดว่าฉันจะไปด้วย
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
ฉันต้องการคำชี้แจงเกี่ยวกับการใช้
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
Django ที่มีอยู่แล้วTimeStampedModel
แต่ถ้าคุณไม่ต้องการสิ่งอื่นใดจากแพ็คเกจนี้เพียงแค่ให้น้ำหนักเพิ่ม