auto_now
Öznitelik ayarlanmış herhangi bir alan da devralınır editable=False
ve bu nedenle yönetici panelinde görünmez. Geçmişte auto_now
ve auto_now_add
argümanlarının ortadan kaldırılması hakkında konuşulmuştu ve hala var olmalarına rağmen, sadece özel bir save()
yöntem kullanarak daha iyi olduğunuzu hissediyorum .
Bu nedenle, düzgün çalışmasını sağlamak için , yalnızca ayarlanmadıysa (öğenin ilk oluşturulduğu zaman gibi) güncellenmesini sağlamak için kendi yönteminizi kullanmamayı auto_now
veya auto_now_add
bunun yerine tanımlamanızı ve öğenin her seferinde güncellenmesini öneririm kaydedilir.save()
created
id
modified
Django kullanarak yazdığım diğer projelerle aynı şeyi yaptım ve böylece save()
şöyle görüneceksin:
from django.utils import timezone
class User(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField()
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(User, self).save(*args, **kwargs)
Bu yardımcı olur umarım!
Yorumlara yanıt olarak düzenleyin:
save()
Bu alan argümanlarına güvenmek yerine aşırı yüklenmeye bağlı kalmamın nedeni iki katlıdır:
- Söz konusu iniş çıkışlar güvenilirlikleri ile birlikte. Bu argümanlar, Django'nun nasıl etkileşime gireceğini bildiği her bir veritabanı türünün bir tarih / zaman damgası alanını tedavi ettiği ve her sürüm arasında kırıldığı ve / veya değiştiği görülüyor. (Ki bunların tamamen kaldırılması çağrısının ardındaki itici güç olduğuna inanıyorum).
- Yalnızca DateField, DateTimeField ve TimeField üzerinde çalışıyor olmaları ve bu tekniği kullanarak her öğe kaydedildiğinde herhangi bir alan türünü otomatik olarak doldurabilirsiniz.
- Kullanım
django.utils.timezone.now()
vs datetime.datetime.now()
, çünkü buna datetime.datetime
bağlı olarak TZ uyumlu veya saf bir nesne döndürür settings.USE_TZ
.
OP'nin hatayı neden gördüğünü ele almak için tam olarak bilmiyorum, ancak created
sahip olmasına rağmen hiç doldurulmamış gibi görünüyor auto_now_add=True
. Bana göre bir hata olarak öne çıkıyor ve yukarıdaki küçük listemde # 1'in altını çiziyor: auto_now
ve auto_now_add
en iyi ihtimalle lapa lapa.