Mengapa kolom "tanggal" saya tidak muncul di sistem admin?
Di file admin.py saya, saya punya
from django.contrib import admin
from glasses.players.models import *
admin.site.register(Rating)
dan Model peringkat memiliki bidang yang disebut "tanggal" yang terlihat seperti ini
date = models.DateTimeField(editable=True, auto_now_add=True)
Namun dalam sistem admin, bidang tidak muncul, meskipun editable
disetel ke True
.
Apakah ada yang punya ide?
sumber
auto_now_add
melalui admin setelah entri pertama kali dibuat?Jika Anda benar-benar ingin melihat tanggal di panel admin, Anda dapat menambahkan
readonly_fields
di admin.py :class RatingAdmin(admin.ModelAdmin): readonly_fields = ('date',) admin.site.register(Rating,RatingAdmin)
Setiap bidang yang Anda tentukan akan ditambahkan terakhir setelah bidang yang dapat diedit. Untuk mengontrol pesanan Anda dapat menggunakan
fields
opsi.Informasi tambahan tersedia dari dokumen Django .
sumber
fields
Anda juga harus meletakkan bidang Anda di dalamnya, jadi Anda akan membutuhkannya di dalamreadonly_fields
danfields
jika tidak, bidang tersebut tidak akan muncul.fieldsets
, baru saja mengalami masalah ini hari ini.auto_now_add=True
bawah Django 1.9. Solusi (semacam) adalah menambahkannya kelist_display
tupel sebagai gantinya. Sunting: Ini akan berfungsi jika Anda juga menambahkan bidang Anda kefields
seperti yang disebutkan @BjornTipling.Peretasan Utama:
Jika Anda benar-benar perlu melakukan ini (seperti yang saya lakukan), Anda selalu dapat meretasnya dengan segera menyetel bidang menjadi "dapat diedit" dengan mendefinisikan bidang sebagai berikut:
class Point(models.Model): mystamp=models.DateTimeField("When Created",auto_now_add=True) mystamp.editable=True
Ini akan membuat bidang dapat diedit, sehingga Anda benar-benar dapat mengubahnya. Tampaknya berfungsi dengan baik, setidaknya dengan mesin pendukung mysql. Saya tidak dapat mengatakan secara pasti jika penyimpanan pendukung lainnya akan membuat data ini tidak dapat diubah dalam database dan dengan demikian menyebabkan masalah saat pengeditan dicoba, jadi gunakan dengan hati-hati .
sumber
Bergantung pada kebutuhan spesifik Anda, dan nuansa perbedaan dalam perilaku, Anda dapat melakukan hal berikut:
from django.utils.timezone import now class MyModel(models.Model): date = models.DateTimeField(default=now)
Bidang default dapat digunakan dengan cara ini: https://docs.djangoproject.com/en/dev/ref/models/fields/#default
The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.
Ini tidak dapat diedit ke
False
sumber
from django.utils.timezone import now
alih-alihdatetime.now
, tetapi ini terlihat menjanjikan.Ini mungkin ada hubungannya dengan auto_now_add menjadi true. Mungkin alih-alih parameter itu untuk menangkap tanggal yang ditambahkan, Anda bisa mengganti metode model save untuk memasukkan datetime ketika id adalah null.
class Rating(models.Model): .... def save(self, *args, **kwargs) if not self.id: self.date = datetime.datetime.now()
sumber
auto_now
tidak digunakan daneditable=False
. +1Jika Anda ingin bidang apa pun terlihat dalam daftar semua entri Anda (saat Anda mengeklik model di admin orang) dan bukan saat Anda membuka entri khusus itu -
class RatingAdmin(admin.ModelAdmin): list_display = ('name', 'date') admin.site.register(Rating, RatingAdmin)
'name' menjadi bidang utama Anda atau bidang lain yang ingin Anda tampilkan di panel admin.
Dengan cara ini Anda dapat menentukan semua kolom yang ingin Anda lihat.
sumber
Anda tidak dapat melakukan itu, periksa dokumentasi
auto_now dan auto_now_add adalah semua bidang yang tidak dapat diedit dan Anda tidak dapat menimpanya ...
sumber