管理システムに「日付」フィールドが表示されないのはなぜですか?
私のadmin.pyファイルには
from Django.contrib import admin
from glasses.players.models import *
admin.site.register(Rating)
評価モデルには、次のような「date」というフィールドがあります
date = models.DateTimeField(editable=True, auto_now_add=True)
ただし、管理システム内では、editable
がTrue
に設定されていても、フィールドは表示されません。
誰にもアイデアがありますか?
管理パネルで日付を確認したい場合は、readonly_fields
inadmin.py:
class RatingAdmin(admin.ModelAdmin):
readonly_fields = ('date',)
admin.site.register(Rating,RatingAdmin)
指定したフィールドは、編集可能なフィールドの最後に追加されます。順序を制御するには、fields
オプションを使用できます。
追加情報は Django docs から入手できます。
メジャーハック:
本当にこれを行う必要がある場合(私と同じように)、フィールドを「編集可能」に設定して、次のようにフィールドを定義することにより、いつでもハックできます。
class Point(models.Model):
mystamp=models.DateTimeField("When Created",auto_now_add=True)
mystamp.editable=True
これによりフィールドが編集可能になるため、実際に変更できます。少なくともmysqlのバッキングエンジンでは、うまく機能しているようです。他のバッキングストアがこのデータをデータベース内で不変にし、編集を試みたときに問題を引き起こすかどうかをcertianに言うことはできませんそのため注意して使用してください。
特定のニーズ、および動作の違いのニュアンスに応じて、次のことを実行できます。
from Django.utils.timezone import now
class MyModel(models.Model):
date = models.DateTimeField(default=now)
デフォルトのフィールドは次のように使用できます。 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.
これはeditableをFalse
に設定しません
Auto_now_addがtrueであることに関係している可能性があります。おそらく、追加時に日付をキャプチャするためのパラメーターの代わりに、モデルのsaveメソッドをオーバーライドして、idがnullのときにdatetimeを挿入できます。
class Rating(models.Model):
....
def save(self, *args, **kwargs)
if not self.id:
self.date = datetime.datetime.now()
特定のエントリを開いたときではなく、すべてのエントリのリストにフィールドを表示したい場合(管理者のモデルをクリックした場合)-
class RatingAdmin(admin.ModelAdmin):
list_display = ('name', 'date')
admin.site.register(Rating, RatingAdmin)
「名前」はメインフィールドまたは管理パネルに表示する他のフィールドです。
これにより、表示するすべての列を指定できます。
あなたはそれを行うことはできません、 ドキュメント を確認してください
auto_nowおよびauto_now_addはすべて編集不可フィールドであり、オーバーライドできません...