Setiap bidang dengan auto_nowset atribut juga akan mewarisi editable=Falsedan karenanya tidak akan muncul di panel admin. Telah ada pembicaraan di masa lalu tentang membuat auto_nowdan auto_now_addargumen hilang, dan meskipun masih ada, saya merasa Anda lebih baik hanya menggunakan metode kustomsave() .
Jadi, untuk membuat ini berfungsi dengan baik, saya akan merekomendasikan untuk tidak menggunakan auto_nowatau auto_now_adddan sebaliknya mendefinisikan save()metode Anda sendiri untuk memastikan bahwa createdhanya diperbarui jika idtidak disetel (seperti ketika item pertama kali dibuat), dan minta pembaruan modifiedsetiap kali item disimpan.
Saya telah melakukan hal yang sama persis dengan proyek lain yang saya tulis menggunakan Django, dan Anda save()akan terlihat seperti ini:
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)
Semoga ini membantu!
Edit dalam menanggapi komentar:
Alasan mengapa saya bertahan dengan kelebihan beban save()vs mengandalkan argumen lapangan ini adalah dua kali lipat:
- Pasang surut tersebut dengan keandalannya. Argumen ini sangat bergantung pada cara masing-masing jenis database yang Django tahu bagaimana berinteraksi dengan memperlakukan bidang cap tanggal / waktu, dan tampaknya pecah dan / atau berubah di antara setiap rilis. (Yang saya percaya adalah dorongan di balik panggilan untuk menghapusnya sama sekali).
- Fakta bahwa mereka hanya bekerja pada DateField, DateTimeField, dan TimeField, dan dengan menggunakan teknik ini Anda dapat secara otomatis mengisi setiap jenis bidang setiap kali item disimpan.
- Gunakan
django.utils.timezone.now()vs. datetime.datetime.now(), karena akan mengembalikan objek TZ-aware atau naif datetime.datetimetergantung settings.USE_TZ.
Untuk mengatasi mengapa OP melihat kesalahan, saya tidak tahu persis, tetapi sepertinya createdbahkan tidak diisi sama sekali, meskipun sudah auto_now_add=True. Bagi saya itu menonjol sebagai bug, dan menggarisbawahi item # 1 dalam daftar kecil saya di atas: auto_nowdan paling auto_now_addtidak terkelupas.