5

TimeStampedModelfromに基づくクラスがありますdjango-extentions:

from model_utils.models import TimeStampedModel


class MyClass(TimeStampedModel):
    pass

デフォルトでは、管理インターフェースのcreatedおよびmodifiedフィールドはエディション ページに表示されませんmy_app/myclass/id

の編集管理ページにフィールドcreatedとフィールドを強制的に表示するために、このハックを試しました。modifiedMyClass

from django.contrib import admin

from my_app.models import MyClass


class MyClassAdmin(admin.ModelAdmin):
    fields = MyClass._meta.get_all_field_names()

admin.site.register(MyClass, MyClassAdmin)

しかし、これにより次の例外が発生しました。

Exception Type:     FieldError
Exception Value:    Unknown field(s) (modified, created) specified for MyClass. Check fields/fieldsets/exclude attributes of class MyClassAdmin.

エディションの管理インターフェイスにフィールドcreatedmodifiedフィールドを表示するにはどうすればよいですか?MyClass

注 1: MyClassはフィールドを含む多くのフィールドを持つモデルManyToManyです。基本クラスのcreatedおよびフィールドを除くすべてのフィールドを表示できます。modifiedTimeStampedModel

注 2:参照中の管理ページは、行のエディション ページです。my_app/myclass/id

4

2 に答える 2

7

readonly_fields解決策は、次の属性を使用することです。

from django.contrib import admin

from my_app.models import MyClass


class MyClassAdmin(admin.ModelAdmin):
    readonly_fields = ('created', 'modified', )

admin.site.register(MyClass, MyClassAdmin)
于 2014-12-18T14:25:31.253 に答える
0

Created および Modified は自己管理フィールドです。機能を「ハック」するのは良い考えではないと思います。次のように、これらのフィールドをリスト表示に表示できます。

多対多の問題の場合:

def <funcname>(self, obj):
    return ', '.join([object.<object_field_you_want_to_display> for object in obj.<manyTomanyField>.all()])

<funcname>.short_description = 'Wanted name for column'

次に、list_display で:

list_display = (...., '<funcname>')

そして、必要なすべてのフィールドを表示したい(作成および変更も)

list_display(...all fields you want ..., '<funcname>', 'created', 'modified')

ただし、それでも良い考えだと思う場合は、これらのフィールドをテンプレート (/includes/fieldset.html) に追加する必要があります。ただし、書き込み値を取得するには、まずコンテキスト プロセッサおよび/またはテンプレート タグを記述する必要があります...など...

于 2014-12-18T11:13:08.020 に答える