Di django - apakah ada bidang cap waktu default untuk semua objek? Yaitu, apakah saya harus secara eksplisit menyatakan bidang 'stempel waktu' untuk 'dibuat pada' di Model saya - atau adakah cara untuk mendapatkannya secara otomatis?
Jawaban:
Tidak ada hal seperti itu secara default, tetapi menambahkannya sangatlah mudah. Cukup gunakan auto_now_add
parameter di DateTimeField
kelas:
created = models.DateTimeField(auto_now_add=True)
Anda juga dapat menggunakan auto_now
untuk bidang 'diperbarui pada'. Periksa perilaku di auto_now
sini .
Untuk auto_now_add
disini .
Model dengan kedua bidang akan terlihat seperti ini:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Secara otomatis tidak terdengar seperti sesuatu yang Django lakukan secara default. Ini tidak akan memaksa Anda untuk meminta stempel waktu.
Saya akan membangun kelas dasar abstrak dan mewarisi semua model darinya jika Anda tidak ingin melupakan stempel waktu / nama bidang, dll.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Tampaknya tidak banyak yang harus diimpor wherever.TimeStampedModel
daripadadjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
dan updated
. Ini adalah cara yang bagus untuk melakukannya dengan bersih.
Jika Anda menggunakan django-extensions (yang merupakan aplikasi bagus untuk menambahkan fungsionalitas ke baris perintah django-admin.py) Anda bisa mendapatkan bidang model ini secara gratis dengan mewarisi dari TimeStampedModel mereka atau menggunakan bidang TimeStamp kustom mereka
Anda dapat mencoba django-extensions
jika Anda ingin menggunakan model abstrak cap waktu
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Ini memiliki model abstrak lainnya. Anda bisa menggunakannya juga.
Saya pikir saya akan pergi dengan
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
Saya membutuhkan beberapa klarifikasi tentang penggunaan
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
untuk Django yang sudah berisiTimeStampedModel
, tetapi jika anda tidak memerlukan apapun dari paket ini, simpan saja tanpa bobot ekstra.