Django Tutorial Part2

Django官网tutorial2
1)创建管理用户

python manage.py crestesuperuser

2)run server

python manage.py runserver

3)visit http://127.0.0.1:8000/admin/
没有登陆过前面创建的superuser就是登陆页面
登陆过就是admin index page
这里写图片描述
4)使poll app在admin中可修改
polls/admin.py:

from django.contrib import admin
from .models import Question

admin.site.register(Question)//tell the admin that Question objects have an admin interface

5)在admin index page最下面有了Question
这里写图片描述
6)点击Questions
这里写图片描述
7)Click the “What’s up?” question to edit it
这里写图片描述
8)click上图右上角history
列出了对此对象做的所有更改,以及进行更改的和用户名时间戳
9)自定义admin form
A.重新排序edit form上的字段
polls/admin.py:

from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)

admin.site.register()第二个参数QuestionAdmin,设置edit form显示的方式
这里写图片描述
将Date published和Question text变顺序
B.将字段分到不同的fieldsets里
polls/admin.py:

from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]//元组的第一个元素是filedset的标题,例如下图Date information,Question text没有标题是因为第一个元素是None
admin.site.register(Question, QuestionAdmin)

这里写图片描述
C.将字段详细内容收起
polls/admin.py:

from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
//collapse收起详细内容
admin.site.register(Question, QuestionAdmin)

这里写图片描述
click上图show显示字段详细内容
D.添加对象
方法一:admin.site.register(Choice)
这里写图片描述
polls/admin.py:

from django.contrib import admin

from .models import Choice, Question
# ...
admin.site.register(Choice)//

Question是ForeignKey,在admin为<select>绿色+的选择框
方法二:inlines相关对象
这里写图片描述
polls/admin.py:

from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3   //3 slots


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]//inlines相关对象

admin.site.register(Question, QuestionAdmin)

用于输入Choice对象需要大量的屏幕空间。Django提供了一种显示Choice的表格方式
这里写图片描述
polls/admin.py:

class ChoiceInline(admin.TabularInline):
    #...

使用TabularInline(而不是StackedInline)
E.显示对象所有的字段
这里写图片描述

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),//只显示question_text字段
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

这里写图片描述

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

用list_display以元组形式显示所有字段
给was_published_recently方法添加几个属性
这里写图片描述
polls/models.py

class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'#指定排序字段
    was_published_recently.boolean = True#将True/False变为对号/横
    was_published_recently.short_description = 'Published recently?'#简短描述

以pub_date从近到远的顺序排序
F.过滤功能
这里写图片描述
通过上图右侧pub_date字段过滤更改列表(Any date,Today,Past 7 days)
polls/admin.py:

list_filter  =  [ 'pub_date' ]

G.搜索功能
这里写图片描述
polls/admin.py:

search_fields = ['question_text']

通过question_text为关键字搜素
10)自定义admin
将admin page最上面Django administration变为Polls Administration
这里写图片描述
A.mysite/settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],#添加DIRS选项
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

DIRS是加载Django模板时要检查的文件系统列表
B.在templates下创建admin目录,在admin目录下拷贝系统文件的django/contrib/admin/templates/admin/base_site.html
找系统文件路径
这里写图片描述
替换base_site.html下面代码:

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

11)更改admin index page中application的顺序(Polls)
在系统文件中拷贝 admin/index.html(同base_site.html),并通过index.html中app_list更改顺序

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值