Django admin后台管理的配置

最近整理了一些关于Django admin后台管理的资料

model:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.


class Post(models.Model):
    STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'))
    title = models.CharField(max_length=250, verbose_name='文章标题')
    # 通常在URL中使用。slug是一个短的字符串,只能包含字母,数字,下划线和减号。将使用slug字段构成优美的URL,也方便搜索引擎搜索
    # unique_for_date参数表示不允许两条记录的publish字段日期和title字段全都相同,这样就可以使用文章发布的日期与slug字段共同生成一个唯一的URL标识该文章。
    slug = models.SlugField(max_length=250, unique_for_date='publish', verbose_name='url')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts', verbose_name='作者')
    body = models.TextField()
    # 自带datetime.now()
    publish = models.DateTimeField(default=timezone.now(), verbose_name='时间')
    # auto_now_add表示当创建一行数据的时候,自动用创建数据的时间填充
    created = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    # auto_now表示每次更新数据的时候,都会用当前的时间填充该字段
    updated = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    # choices参数,所以这个字段的值只能为一系列选项中的值。
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    class Meta:
        # 指定了Django在进行数据库查询的时候,默认按照发布时间的逆序将查询结果排序。
        # 逆序通过加在字段名前的减号表示。这样最近发布的文章就会排在前边。
        ordering = ('-publish',)

    # __str__()方法是Python类的功能,供显示给人阅读的信息,这里将其设置为文章的标题。
    # Django在很多地方比如管理后台中都调用该方法显示对象信息。
    def __str__(self):
        return self.title

为Post模型迁移数据,blog为app名称,可以不写,那么就会给所有项目迁移数据库

                 迁移:

                               python manage.py makemigrations blog
                 查看生成的SQL语句,0001是我们执行上面的命令会在blog应用下的migrations目录里新增一个0001_initial.py文件,里面包含了一个迁移数据文件里包含了与其他迁移数据的依赖关系,以及实际要对数据库执行的操作。

                               python manage.py sqlmigrate blog 0001

                 然后来让数据库与新的数据模型进行同步

                                python manage.py migrate

                 接着就会看到控制台输出:

                                Applying blog.0001_initial... OK

 

如果要使用后台管理,就需要先注册一个超级用户

           python manage.py createsuperuser

然后会看到以下输出

            Username (leave blank to use 'admin'): admin

            Email address: [email protected]

            Password: ********

            Password (again): ********

            Superuser created successfully.

 

启动项目

          python manage.py runserver

打开   http://127.0.0.1:8000/admin/

           

输入用户名密码登录

            

向管理后台添加模型

from django.contrib import admin
from .models import Post
# Register your models here.


admin.site.register(Post)

每当在管理后台中注册一个模型,就能迅速在管理后台中看到它,还可以对其进行增删改查

我们点击增加

            

我们新增数据,点击保存后

   

      我们能在这看到这个: title: 今天是个开心的日子, 是因为我们model中写了

           def __str__(self):
                 return self.title

然后我们想显示更多字段怎么办,当然可以接着在return后面写,但是有一种更好的方法,在admin.py中写

from django.contrib import admin
from .models import Post
# Register your models here.


class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)

admin.site.register(Post, PostAdmin)

register也可以这样写:两种方法都可以

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):

然后我们会看到后台中这样显示

可以看到在该页面上显示的字段就是list_display中的字段

增加  list_filter = ('status', 'created', 'publish', 'author',)

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)

页面出现了一个右侧边栏用于筛选结果,这个功能由list_filter属性控制

增加  search_fields = ('title', 'body',)

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)
    search_fields = ('title', 'body',)

页面上方出现了一个搜索栏,这是因为在search_fields中定义了可搜索的字段

增加 prepopulated_fields = {'slug': ('title',)}

from django.contrib import admin
from .models import Post
# Register your models here.

@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',)}

这个时候点击Add Post,可以发现也有变化。当输入文章标题时,slug字段会根据标题自动填充,这是因为设置了prepopulated_fields属性中slug字段与title字段的对应关系。

增加    raw_id_fields = ('author',)

from django.contrib import admin
from .models import Post
# Register your models here.

@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',)

作者字段旁边出现了一个搜索图标,并且可以按照ID来查找和显示作者,如果在用户数量很大的时候,这就方便太多了。

增加   date_hierarchy = 'publish'

from django.contrib import admin
from .models import Post
# Register your models here.

@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',)

from django.contrib import admin
from .models import Post
# Register your models here.

@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',)

默认通过Status和Publish字段进行排序

 

以上就是admin后台中的一些配置了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章