永发信息网

如何正确使用 Django Admin

答案:1  悬赏:30  手机版
解决时间 2021-11-28 09:55
如何正确使用 Django Admin
最佳答案
1. Django Admin 不适合最终用户使用

Django admin是为管理员设计的, 而不是给最终用户使用的. Django admin的存在是为了方便管理员添加修改删除数据和管理站点任务.

2. 列表显示

如上图, 因为model的默认文本显示是 xxx object, 所以在admin列表页中默认显示的也是xxx object. 如果希望显示更有用的信息 我们可以进行如下设置:

为model写__unicode__()方法
如果希望model在列表页中显示更多项, 则需要使用list_display

__unicode()__例子:
# models.py
from django.db import models

class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.CharField(max_length=100)
content = models.TextField()
is_published = models.BooleanField(default=False)

def __unicode__(self):
return self.title

# admin.py
from django.contrib import admin
from .models import Article

admin.site.register(Article)

结果:

如果希望显示其他项:
# admin.py
from django.contrib import admin
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'is_published')

admin.site.register(Article, ArticleAdmin)

结果:

3. 为ModelAdmin增加动作

我们可以为ModelAdmin增加method或function, 以此使admin界面更符合我们的需求.

例如, 我们希望在在admin界面中显示一个明确地URL, 但当我们在model中定义了get_absolute_url()方法后, django admin默认给我们的却是一个与我们想要的URL完全不同的URL. 于是我们可以通过以下方法定义该URL:
# admin.py
from django.contrib import admin
from django.core.urlresolvers import reverse
from django.utils.html import format_html

from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'is_published',)
readonly_fields = ('show_url',)

def show_url(self, instance):
url = reverse('article_detail', kwargs={'pl': instance.pk})
response = format_html("""文章预览preview""", url)
return response

show_url.short_description = u"文章预览"
# 显示HTML tag
# 对于用户提交的数据, 永远不要这么设置!
show_url.allow_tags = True

注意, allow_tags属性, 其默认值是False, 如果错误使用将会带来安全隐患. 如果设置为True,
在admin中会允许显示HTML tag. 因此我们使用的原则是, 对于用户输入的信息, 永远不设置allow_tags=True.
只有当其内容是系统生成, 用户无法修改的时, 才能使用allow_tags=True.

4. 不在多用户编辑环境使用list_editable

django admin为我们提供了在列表页修改model属性的功能, 这样方便管理员一次修改多个属性. 如果管理员只有一个人的话,
那就没问题, 但在多用户环境中时, 却是会存在一个很严重的潜在问题. 因为在list页提交的修改信息, 记录的是位置, 而不是model的主键.
举个例子, 文章列表页默认按照创建顺序逆序排列, 用户A打开文章列表页, 并开始修改, 同时用户B增加了一篇新文章, 此时,
当用户A提交修改后其后的文章信息都会出错.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
这福州达明路美食街叫什么
sola中茉莉喝的那种饮料,是什么,有卖吗?
绍兴哪些公司有实习单位
莫言与马云谁更值得我们敬重呢?
男性每周喝两次酒,期间可以要孩子吗
京东比价插件求推荐?
女孩在QQ群说她有男朋友了
方太热水器在使用的时候燃烧工况灯是常亮的?
凯美瑞16款2.0到底多少公里换机
甲比乙的3倍多2,甲比乙多62,甲乙分别是多少
克什克腾旗气象局地址在哪,我要去那里办事,
从水门事件中,谈如何建立诚信社会
云南镇雄县有几个村
半山腰上出现平地,这种是不是山麓呢?
请大师指点近期搬家吉日
推荐资讯
短发,剪了平刘海很难看怎么办
单选题下列有关细菌的说法中,正确的是A.有些
作文琼玛卡若的立意
德克士德意卡集享卡和德意卡有什么区别?
小胖吃了一块披萨的八分之一小丁丁也吃了一份
k473次列车到石家庄北停不停
excel2007排序时,主要关键字是姓名,次要关
爱内ひかり 是 ひなた朱莉 吗
昨晚法国2:1赢得罗马尼亚,请问买1/1.5球
单选题下列地区,城市出现较晚的是A.美索不达
姚通定州发兵的密码是什么
苏州工业园区邮政编码
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?