美文网首页
1.4 为模型创建管理员站点

1.4 为模型创建管理员站点

作者: gznb | 来源:发表于2020-07-20 16:17 被阅读0次

    1. 为模型创建管理员站点

    现在你有了 一个定义好的Post模型,接下来你将要创建一个简单的管理员站点去管理你的 blog 文章。Django 附带了一个内置的 管理员站点接口,编辑内容非常有用。这个 Django 站点是通过读模型的元数据动态创建的,并且为了可以编辑内容提供了一个可用于生产的界面。你可以开箱即用,确定你想要的模型在其中显示的方式。(译者注: 就是说可以通过配置一个文件,让模型在管理员站点中是否显示,以及如何显示)

    django.contrib.admin 应用程序 事先就已经在 INSTALLED_APPS 中了,所以你不需要再添加它。

    2. 创建一个超级用户

    首先你需要创建一个用户去管理 管理员站点,运行下面的命令:

    python manage.py createsuperuser

    你将看到下面的输出,输入你想要的 名字,邮箱,密码,如下所示:


    Snipaste_2020-07-16_14-11-50.jpg

    (译者注: 这里提示 The password is too similar to the email address., 是因为我的密码设置的是 adminadmin,和邮箱比较像。不用管那么多,直接 y 就完事了。生产环境中密码最好还是要复杂一点)

    3. Django 的管理员站点

    现在通过命令 python manage.py runserver 命令启动开发服务器,并且在你的浏览器中 打开 http://1227.0.0.1:8000/admin/ 网站, 你可以看到管理员站点的登录页面,类似下面的快照:

    Snipaste_2020-07-16_14-15-54.jpg

    使用你上一步创建的用户凭证进行登录,你将看到管理员站点的索引页面,如下面的网页所示:


    Snipaste_2020-07-16_14-17-43.jpg

    在前面的网页中你可以看到GroupUser 两个模型位于Django 验证框架 django.contrib.auth 中的一部分。 如果你点击 Users ,你可以看到你已经创建的用户。

    4. 添加模型到管理员站点

    让我们把你的 blog 模型添加到管理员站点中,编辑 blog 应用程序中的 admin.py 文件,使得它看起来如下所示:

    from django.contrib import admin
    from .models import Post
    
    admin.site.register(Post)
    

    在你的浏览器中刷新以下管理员站点,你应该可以看到 你的 Post 模型已经在站点中了,如下所示:

    Snipaste_2020-07-16_14-17-43.jpg

    这很简单,对吧? 当你在 Django 管理员站点中注册了一个模型以后,你将通过内省的方式(译者注: 就是自动的方式,自动生成)生成的一个使用比较友好的界面,允许你用一个简单的方法 列出、编辑、创建、删除对象。

    点击 Post 旁边的 Add 链接去添加一篇新文章,你将看到一个表单,它是Django 根据你的模型自动生成的,如下面的屏幕快照所示:

    Snipaste_2020-07-16_14-36-26.jpg

    Django 为每一个类型字段使用不同的表单部件,甚至是一些复杂的字段,例如 DateTimeField 字段,也可以通过一个简单的接口显示,例如 JavaScript 的时间选择器。

    填写完这个表单并且点击 SAVE 按钮后,你将重定向到 文章列表页面,并带有 成功的消息和你刚刚创建的文章。如下面快照所示:

    Snipaste_2020-07-16_14-45-47.jpg

    (译者注: 我添加的文章和书中的标题啥的不太一样,问题不大)

    5. 定制模型的显示方法

    现在让我们看看如何定制管理员站点, 编辑在blog 应用程序的 admin.py 文件,并且改变它,如下所示:

    from django.contrib import admin
    from .models import Post
    
    
    @admin.register(Post)
    class PostAdmin(admin.ModelAdmin):
        list_display = ('title', 'slug', 'author', 'publish', 'status')
    

    你告诉 django 管理员站点,你的模型通过使用一个继承于ModelAdmin的自定义类 注册在站点中,在这个类中,可以包含如何在站点中显示模型的信息,以及和它如何交互。

    这个 list_display 属性允许你去设置一些你想要显示在管理对象列表页面的模型的字段。这个 @admin.register() 装饰器执行和 admin.site.register() 函数相同的功能,前者注册 ModelAdmin 类的方式是通过装饰实现的。

    让我们用更多的选项来定制 admin 模型,使用下面的代码:

    from django.contrib import admin
    from .models import Post
    
    
    @admin.register(Post)
    class PostAdmin(admin.ModelAdmin):
        list_display = ('title', 'slug', 'author', 'publish', 'status')
        list_filter = ('status', 'created', 'publish', 'author')
        search_fields = ('title', 'body')
        prepopulated_fields = {'slug': ('title', )}
        raw_id_fields = ('author', )
        date_hierarchy = 'publish'
        ordering = ('status', 'publish')
    

    现在返回你的浏览器并重新加载以下,它的显示如下:

    Snipaste_2020-07-16_15-13-51.jpg

    你可以看到显示在 文章列表页面中的字段,是你在 list_display 属性中指定的字段。这个列表页面现在包含了一个右侧边栏,允许你通过包含在list_filter 属性中的字段过滤结果。

    在这个页面上出现了一个搜索栏,这是因为你通过 search_fields 属性定义了一个关于搜索字段的列表。在搜索栏的下方,有一些导航链接,可以通过日期层次结构进行导航。这是通过 date_hierarchy 属性定义的。你还可以看到,默认情况下,文章是按照STATUSPUBLISH列排序的,你通过 ordering 属性指定默认的排序标准。

    接下来,点击下 ADD POST 链接,你会主要到一些改变,当你输入一个新文章的标题时,这个 slug 字段被自动填满了,这是你已经通过 prepopulated_fileds 属性 告诉 Django, slug 这个字段 将要根据 title 字段的输入而填充。

    author 字段现在显示了一个可伸缩的查找小组件,当有成千上万的用户时会比使用下拉选择输入要好。它的实现是通过 raw_id_fields 属性来实现的,如下所示:

    Snipaste_2020-07-16_15-44-57.jpg

    通过这几行代码,你已经定制了一个如何将你的模型显示在 管理员站点的方法,这里还有很多的方法去定制,已经扩展Django 的管理员站点,你将在这本书的后面学习都更多有关这些的知识。

    相关文章

      网友评论

          本文标题:1.4 为模型创建管理员站点

          本文链接:https://www.haomeiwen.com/subject/zrdykktx.html