auto_nowÖznitelik ayarlanmış herhangi bir alan da devralınır editable=Falseve bu nedenle yönetici panelinde görünmez. Geçmişte auto_nowve auto_now_addargü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_nowveya auto_now_addbunun yerine tanımlamanızı ve öğenin her seferinde güncellenmesini öneririm kaydedilir.save()createdidmodified
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.datetimebağ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 createdsahip 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_nowve auto_now_adden iyi ihtimalle lapa lapa.