编写你的第一个Django应用程序,第七部分

时间:2022-10-15 14:41:41

本次重点定制在django的自动生成的管理站点。

自定义管理表单

通过注册question模型(admin.site.register(Question))。django能够制造一个默认的表单表示,通常,你需要指定要管理表单的外观和工作方式。

polls/admin.py修改:

重新把字段排序:

class QuestionAdmin(admin.ModelAdmin):
    fields = ['question_text','pub_date']   #前后代表排序

admin.site.register(Question,QuestionAdmin)

编写你的第一个Django应用程序,第七部分

这里只有两个字段,效果不明显。

再来:

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        ('问题信息',{'fields':['question_text']}),
        ('日期信息',{'fields':['pub_date']}),
    ]

admin.site.register(Question,QuestionAdmin)

编写你的第一个Django应用程序,第七部分

添加相关对象

一个question对应多个choice,并且到此的管理页面不显示。

有个笨方法,就是和question一样注册:

编写你的第一个Django应用程序,第七部分

 

 但是这种效率低。如果您可以在创建Question对象时直接添加一堆Choices,那会更好 让我们做到这一点:

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        ('问题信息',{'fields':['question_text']}),
        ('日期信息',{'fields':['pub_date'],'classes':['sollapse']}),

    ]
    inlines = [ChoiceInline]
admin.site.register(Question,QuestionAdmin)
# admin.site.register(Choice)   删除注册的choice

效果:

编写你的第一个Django应用程序,第七部分

 

还有问题,你需要更大的屏幕显示足够的choice。所有还有更好的解决办法:

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3

效果:

编写你的第一个Django应用程序,第七部分

 

 自定义管理员更改列表

现在问题管理页面看起来不错,让我们对“更改列表”页面进行一些调整 - 显示系统中所有问题的页面。

 默认情况下,Django显示str()每个对象。但是有时如果我们能够显示单个字段会更有帮助。要做到这一点,请使用list_play

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text','pub_date','was_published_recently')

编写你的第一个Django应用程序,第七部分

显示更多字段了。而且还可以进行排序。

修改model.py:

    def was_published_recently(self):
        now=timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = '最近发布?'

 

效果:

编写你的第一个Django应用程序,第七部分

添加过滤:

    list_filter = ['pub_date']
#都是在注册模型里

编写你的第一个Django应用程序,第七部分

是不是还缺少一个搜索功能呀!

search_fields = ['question_text']

编写你的第一个Django应用程序,第七部分

自定义管理员的外观

定制项目模板

打开settings.py文件:

 'DIRS': [os.path.join(BASE_DIR,'templates')],  #dirs是django模板要检查的文件系统目录列表,这是一个搜索路径。

 

 在项目目录下创建templates/admin/base_site.html:

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration---王者小喵喵</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

 

说明:此段代码是复制过来的,去哪复制呢?去django下。 

 C:\Users\20152\Anaconda3\Lib\site-packages\django\contrib\admin\templates\admin\base_site.html

效果:

编写你的第一个Django应用程序,第七部分

 

 有没有看到我的王者小喵喵呢?ixix