覆盖更改注释更改列表

时间:2012-02-07 20:53:58

标签: django django-models django-admin

是否可以覆盖django管理员中的评论更改列表和详细信息视图,以便我可以获得对评论的对象的字符串表示,例如评论为对象ID的博客帖子的标题?我假设对象ID来from here我想查看是否可以查询该对象ID并显示附加注释的标题。

1 个答案:

答案 0 :(得分:2)

@ mipadi关于使用__unicode__的建议仍然适用。由于注释框架使用通用外键,因此直接依赖于模型上的特定字段名称(例如title)是一个坏主意。如果一个与通用相关的对象没有该字段,则一切都会崩溃。如果您依赖__unicode__(无论如何都应该添加到每个模型中),您将获得更高的可靠性。

下面的代码详细说明了如何将相关对象的unicode表示添加到注释更改列表中。它需要对默认的CommentsAdmin进行子类化,添加一个方法来返回相关对象的unicode表示,然后使用该方法替换object_pk中的默认list_display

from django.contrib.comments.models import Comment
from django.contrib.comments.admin import CommentsAdmin

class CustomCommentsAdmin(CommentsAdmin):
    list_display = ('name', 'content_type', 'object_title', 'ip_address', 'submit_date', 'is_public', 'is_removed')

    def object_title(self, obj):
        return unicode(obj.content_object)
    object_title.short_description = 'Title'
    object_title.admin_order_field = 'content_pk'

admin.site.unregister(Comment)
admin.site.register(Comment, CustomCommentsAdmin)