zoukankan      html  css  js  c++  java
  • Django笔记 2

    一、使用admin模块

    django里自带了admin模块,可以使用它来在后台管理数据,如添加或删除数据,还可以添加或删除用户和组等等。

    要想使用这个模块,首先需要去掉几个注释:

    1. 在INSTALLED_APP里面添加或者注释掉django.contrib.admin
    2. 在urls里面注释掉 from django.contrib import admin和admin.autodiscover()这两行
    3. 同时注释掉下面的url(r'^admin/',include(admin.site.urls))

    到这里,可以先runserver,然后到 http://localhost:8000/admin/ 里登录了。但是还没有任何我们创建的model的信息,所以为了管理polls应用,需要在polls文件夹下添加一个admin.py文件:

    from django.contrib import admin
    from polls.models import Poll
    
    admin.site.register(Poll)

    然后重启一下server就可以看到Poll模块出现在admin界面里了,然后就可以在里面修改。

    二、自定义admin表单

    admin的很多东西都是可以自定义的,比如,这里的polls,即对于"投票"这个模型,我们可以决定在admin的表单里哪些信息可以显示,哪些不行。该怎么办呢?自定义一个admin class就行了,然后作为参数传递给register方法:

    #polls/admin.py
    from django.contrib import admin
    from polls.models import Poll
    
    class PollAdmin(admin.ModelAdmin):
        fieldsets = [
        (None, {’fields’: [’question’]}),
        (’Date information’, {’fields’: [’pub_date’]}),
        ]
    
    admin.site.register(Poll, PollAdmin)

    上面的代码通过传入fieldsets变量,确定了显示的内容:question和pub_date,其中pub_date这一部分还有一个标题:Date information。

    我们知道,选项Choice这个模块有一个属性poll,它在定义时指明了外键是Poll,也就是说,在新建一个选项Choice的时候,需要从很多个现有的Poll实例中选择其中一个。当然,如果目前还没有那个Poll,需要先新建一个Poll,然后再指向它。这样一个过程可以转换为另一种方法,即在新建一个投票Poll的时候,顺便把指向它的所有选项Choice都新建了,这样显得更简单一些,下面的代码就是实现这个功能的:新建一个Poll的同时新建多个Choice(默认是三个)

    from django.contrib import admin
    from polls.models import Poll,Choice
    
    class ChoiceInline(admin.TabularInline):
        model = Choice
        extra = 3
    
    class PollAdmin(admin.ModelAdmin):
        fieldsets = [
        (None, {’fields’: [’question’]}),
        (’Date information’, {’fields’: [’pub_date’], ’classes’: [’collapse’]}),
        ]
        inlines = [ChoiceInline]
    
    admin.site.register(Poll, PollAdmin)

    就是在admin class里面指定了内联的类:ChoiceInline,而ChoiceInline又指定它使用的类是Choice,并且有三个,当然,如果需要的不止三个,还可以add。

    显然,我们并没有单独注册Choice这个模块,而是在新建Poll的时候顺便把Choice也新建了,下面是一个新建的效果图:

    三、自定义admin修改页面

    当我们单击某个已经存在的投票的时候,显示的仅仅是每个投票的问题,这是因为我们之前为poll定义了__unicode__方法的缘故,显然,仅显示这一点是不够的,怎么增加内容呢,其实,只需要把需要显示的属性放到list_display元组中就可以了:

    class PollAdmin(admin.ModelAdmin):
        # ...
        list_display = ('question', 'pub_date', 'was_published_recently')

    于是,就显示了question,pub_date和was_published_recently这三列,但是,前两个可以点击排序,第三个不行,因为它不是数据库中的一列,然而我们可以这样写:

    class Poll(models.Model):
        question = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
        def __unicode__(self):
            return self.question
        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
        was_published_recently.short_description = 'Published recently?'

    admin_order_field就是说按照pub_date字段来排序;设置一个boolean字段就是说显示的内容不是True和False了,而是用一个图标显示,true就是对号,false就是一个红色的横线;short_description可以认为是这个字段的全称吧。

    除此之外,还有一些有用的特性,比如,你在admin.py里添加list_filter=['pub_date'],就会在右侧有一个filter bar,它的意思是按出版时间进行过滤;添加search_fields=['question'],效果就会在最上方有一个搜索框,意思是对question字段进行搜索。

    四、自定义admin外观

    最后,关于admin的整个模块的外观都是可以更改的。首先你要知道,settings.py里的TEMPLATE_DIRS是django的模版所在的文件夹,你可以将你自己的template文件夹放到这里。如果要自定义外观,比如觉得admin页面不够美观,那么可以在模版文件夹下面新建一个admin文件夹,然后把相应的html文件放进去,比如base_site.html。但是我觉得没有更改的必要。

    如果需要了解更多的细节,请参考django的官网文档:https://docs.djangoproject.com/en/dev/ref/contrib/admin/

  • 相关阅读:
    jtopo
    转载model2
    转载model
    Vue -- 后台系统布局导航栏
    Vue -- iview表格 axiso调用接口数据
    Vue -- 视频&&下载 组件
    Vue -- echarts 折线图demo
    Vue -- axios封装
    Vue -- 验证码
    01 & 02 & 03笔记
  • 原文地址:https://www.cnblogs.com/cubika/p/2772171.html
Copyright © 2011-2022 走看看