5

我有一个基于TimeStampedModelfrom的课程django-extentions

from model_utils.models import TimeStampedModel


class MyClass(TimeStampedModel):
    pass

默认情况下,在管理界面中,createdmodified字段不会显示在版本页面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 回答