【问题标题】:Display created/modified fields of django_extensions in admin interface在管理界面中显示 django_extensions 的创建/修改字段
【发布时间】:2015-02-17 03:17:41
【问题描述】:

我有一个基于来自django-extentionsTimeStampedModel 的课程:

from model_utils.models import TimeStampedModel


class MyClass(TimeStampedModel):
    pass

默认情况下,在管理界面中,createdmodified 字段不会显示在版本页面 my_app/myclass/id 中。

我尝试了这个技巧来强制在MyClass 的编辑管理页面中显示createdmodified 字段:

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.

知道如何在MyClass 版管理界面中显示createdmodified 字段吗?

注 1: MyClass 是一个有很多字段的模型,包括 ManyToMany 字段。我可以显示除基类TimeStampedModel 中的createdmodified 字段之外的所有字段。

注2:参考的admin页面为一行的编辑页面:my_app/myclass/id

【问题讨论】:

  • 你想在哪里查看创建和修改?
  • 我想在MyClass管理页面中显示值。
  • 为什么不使用 list_dsiplay 在列表视图中显示它们?
  • 事实上我简化了MyClass的定义。实际上,我有一个 ManyToMany 字段,list_display 不支持。
  • 您的问题没有描述多对多字段的问题,那么您的实际问题是什么?你怎么能显示一个ManyToMany字段?或者你如何显示时间戳?

标签: django django-admin django-extensions


【解决方案1】:

解决方法是使用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)

【讨论】:

    【解决方案2】:

    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) 中添加这些字段是个好主意。但是你应该首先编写上下文处理器和/或模板标签来获取写入值......等等......

    【讨论】:

    • 感谢您的解决方案,但我想修改管理界面编辑页面中的显示,即。 my_app/myclass/id。我已经相应地编辑了问题。
    • 我修改了我的答案。我认为这不是一个好主意,因为创建和修改是自我管理的。如果要显示值(不更改),可以在模板中显示它(.../includes/fieldset.html)。你应该先写上下文处理器:)
    • 如果我的理解不错,list_display在我们显示不在一个MyClass实例的编辑页面中的所有MyClass值列表时修改显示。
    • list_display 不在您的版本页面中,是的。所以如果你想在编辑页面中创建和修改,我告诉你......在你的模板中你可以显示它。在您的模板中,您可以显示所有您想要的内容。
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2013-07-09
    • 2023-03-07
    • 2010-12-03
    相关资源
    最近更新 更多