Django'da - tüm nesneler için varsayılan bir zaman damgası alanı var mı? Yani, Modelimde 'oluşturulma tarihi' için açıkça bir 'zaman damgası' alanı beyan etmem gerekiyor mu - yoksa bunu otomatik olarak elde etmenin bir yolu var mı?
Yanıtlar:
Varsayılan olarak böyle bir şey yoktur, ancak bir tane eklemek çok kolaydır. Sadece sınıftaki auto_now_add
parametreyi kullanın DateTimeField
:
created = models.DateTimeField(auto_now_add=True)
Ayrıca auto_now
bir 'güncelleme tarihi' alanı için de kullanabilirsiniz . auto_now
Buradaki davranışını kontrol edin .
İçin auto_now_add
burada .
Her iki alana sahip bir model şu şekilde görünecektir:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Otomatik olarak django'nun varsayılan olarak yapacağı bir şey gibi görünmüyor. Sizi bir zaman damgası istemeye zorlamaz.
Zaman damgasını / alan adını vb. Unutmak istemiyorsanız, soyut bir temel sınıf oluşturur ve ondan tüm modelleri miras alırdım.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Bunun wherever.TimeStampedModel
yerine içe aktarmak pek bir şey gibi görünmüyordjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
ve için zaman damgasına ihtiyaç duyan 3 sınıfım var updated
. Bu, temiz bir şekilde yapmanın harika bir yoludur.
Django-extensions kullanıyorsanız (django-admin.py komut satırı yardımcısına işlevsellik eklemek için iyi bir uygulama), bu model alanlarını TimeStampedModel'den miras alarak veya özel TimeStamp alanlarını kullanarak ücretsiz olarak alabilirsiniz.
Django uzantılarını deneyebilirsiniz
zaman damgalı soyut model kullanmak istiyorsanız
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Başka soyut modellere sahiptir. bunu da kullanabilirsin.
Sanırım birlikte giderdim
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
Kullanımla ilgili bazı açıklamalara ihtiyacım var
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
Zaten içeren Django için de varTimeStampedModel
, ancak bu paketten başka bir şeye ihtiyacınız yoksa, sadece ekstra ağırlık olmadan saklayın.