Django: 如何在管理界面显示有用的数据库数据?

3 投票
2 回答
3285 浏览
提问于 2025-04-17 00:05

我设置了我的Django网站,使用了下面的admin.py:

import models
from django.contrib import admin
admin.site.register(models.Comment)

这个文件用的是这个models.py:

from django.db import models
class Comment(models.Model):
    text = models.CharField(max_length=400)
    name = models.CharField(max_length=100)
    date = models.DateTimeField(auto_now = True)
    article = models.CharField(max_length=100)

但是,当我访问管理页面时,看到的是这样的:

这里输入图片描述

这对我来说并没有什么帮助。点击每个链接会显示该对象的数据,但我希望能在这个视图中看到每个对象的信息。我一直在查看ModelAdmin类,地址是:

https://docs.djangoproject.com/en/dev/ref/contrib/admin/

但我还是没搞明白。这个ModelAdmin是一个需要和我“实际”模型保持同步的独立模型类吗?还是说它只是一个接口,让我的管理网站可以访问实际模型?它能做到我想要的(在管理界面显示有用的数据)吗,还是说它有其他的功能?

我在想,Django的管理页面应该能替代PHPMyAdmin,完成一些简单的任务,比如浏览数据库和手动修改单个对象。这真的是这样吗?

2 个回答

5

管理员会把你的对象转换成字符串,所以你只需要添加一个 def __str__ 或者 def __unicode__ 方法。

(正如 @Mandax 提醒我的,文档建议只定义 __unicode__ 方法。)

def __unicode__(self);
    return u"%s (%s): %s" % (self.article, self.date, self.name)
4

就像在文档中说的,你的模型的ModelAdmin部分是用来描述管理界面如何展示你的模型的。它需要和实际的模型保持一定的一致性,比如说你不能显示那些在模型中不存在的字段。你似乎对变更列表视图感兴趣,这个视图有很多自定义的选项(这些都在文档里有详细说明,还有教程)。一个简单的开始可以是:

from django.contrib import admin

class CommentAdmin(admin.ModelAdmin):
    # define which columns displayed in changelist
    list_display = ('text', 'name', 'date', 'article')
    # add filtering by date
    list_filter = ('date',)
    # add search field 
    search_fields = ['text', 'article']

admin.site.register(Comment, CommentAdmin)

有很多自定义的选项,记得随时参考文档!最后,你当然可以用它来替代PHPMyAdmin,设置管理界面来浏览和修改对象非常简单,使用的效果就看你怎么利用它了。

撰写回答