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 管理站点:TemplateDoesNotExist?