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

Posted

技术标签:

【中文标题】Django:在管理界面中显示有用的数据库数据?【英文标题】:Django: show useful database data in admin interface? 【发布时间】:2011-10-31 21:39:31 【问题描述】:

所以我使用以下 admin.py 设置了我的 django 站点:

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/

但我还没有设法把它包起来。它是一个单独的模型类,需要与我的“实际”模型保持同步吗?它只是我的管理站点访问实际模型的接口吗?它是做我想做的事情(允许在管理界面中显示有用的数据)还是做其他事情?

我认为 Django Admin 页面应该能够取代 phpMyAdmin 来执行简单的任务,例如浏览数据库和手动修改单个对象。是这样吗?

【问题讨论】:

【参考方案1】:

管理员将您的对象转换为字符串,因此只需输入 def __str__def __unicode__

(正如@Mandax 提醒我docs 建议只定义__unicode__。)

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

【讨论】:

实际上更喜欢(如文档所说)只定义__unicode__,让 Django 担心编码。 @mandax 是的,你是对的。我会将其添加到答案中,谢谢。 这在 2.0 及更高版本中是否仍然有效,或者通常在 python 3 中有效? @ic_fl2 不,在 Python 3 中你应该只定义 __str__【参考方案2】:

正如documentation 中所说,您模型的ModelAdmin 描述了管理部分将如何表示您的模型。它确实需要与实际模型保持同步,显示模型上不存在的字段等对您来说没有意义。您似乎对更改列表视图感兴趣,该视图具有许多自定义选项(所有在文档和tutorial 中描述)。一个简单的开始可能是:

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,它很容易设置 admin 来浏览、修改对象等,你能从中得到多少使用取决于你。

【讨论】:

以上是关于Django:在管理界面中显示有用的数据库数据?的主要内容,如果未能解决你的问题,请参考以下文章

Django admin 一些有用的设置

我如何在管理界面中显示模型/数据库的帮助文本?

在 Django 的管理界面中很好地显示日期

Django 管理站点:TemplateDoesNotExist?

如何在 DJango 管理界面中显示 ForeignKey 反向查找列表?

在 Django 管理界面中链接以直接从数据库中下载模型字段