代码改变世界
[登录 · 注册]
  • Django(九)admin相关知识
  • https://www.cnblogs.com/yuanchenqi/articles/6083427.htm

    https://www.cnblogs.com/haiyan123/p/8034430.html

    Django admin :关于数据库的一个后台管理工具

      admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理。默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,

    它已经够用,但是有时候,一些特殊的功能还需要定制,比如搜索功能,下面这一系列文章就逐步深入介绍如何定制适合自己的admin应用。

    如果你觉得英文界面不好用,可以在setting.py 文件中修改以下选项

    LANGUAGE_CODE = 'en-us'  #LANGUAGE_CODE = 'zh-hans'

    一  认识ModelAdmin

       管理界面的定制类,如需扩展特定的model界面需从该类继承。

    二 注册medel类到admin的两种方式:

         <1>   使用register的方法

    admin.site.register(Book,MyAdmin)

      <2>   使用register的装饰器

    @admin.register(Book)

    三 掌握一些常用的设置技巧

    •     list_display:     指定要显示的字段
    •     search_fields:  指定搜索的字段
    •     list_filter:        指定列表过滤器
    •     ordering:       指定排序字段
    from django.contrib import admin
    from app01.models import *
    # Register your models here.
    
    # @admin.register(Book)#----->单给某个表加一个定制
    class MyAdmin(admin.ModelAdmin):
        list_display = ("title","price","publisher")
        search_fields = ("title","publisher")
        list_filter = ("publisher",)
        ordering = ("price",)
        fieldsets =[
            (None,               {'fields': ['title']}),
            ('price information', {'fields': ['price',"publisher"], 'classes': ['collapse']}),
        ]
    
    admin.site.register(Book,MyAdmin)
    admin.site.register(Publish)
    admin.site.register(Author)

    创建超级管理员

    python manage.py createsuperuser

    登陆admin

    from django.db import models
    
    # Create your models here.
    
    class Book(models.Model):
        name = models.CharField(max_length=32)
        price = models.IntegerField()
        pub_date = models.DateField()
        publish = models.ForeignKey("Publish",on_delete=models.CASCADE)
        authors = models.ManyToManyField("Author")
    
        def __str__(self):
            return self.name
    
    class Publish(models.Model):
        name = models.CharField(max_length=32)
        city = models.CharField(max_length=32)
    
        def __str__(self):
            return self.name
    
    class Author(models.Model):
        name = models.CharField(max_length=32)
        age = models.IntegerField()
    
        def __str__(self):
            return self.name
    
    # class Book_Author(models.Model):
    #     book = models.ForeignKey("Book", on_delete=models.CASCADE)
    #     author = models.ForeignKey("Author", on_delete=models.CASCADE)
    models

    admin.py

    from django.contrib import admin
    from app import models
    # Register your models here.
    
    admin.site.register(models.Book)
    admin.site.register(models.Publish)
    admin.site.register(models.Author)

    自定义admin样式

    admin.py

    from django.contrib import admin
    from app import models
    # Register your models here.
    
    class BookAdmin(admin.ModelAdmin):
        list_display = ('name','price','pub_date')
    
    admin.site.register(models.Book,BookAdmin)
    admin.site.register(models.Publish)
    admin.site.register(models.Author)

    注意:list_display不可以加多对多的关系

    此时price,pub_date不可以直接在页面上edit,需要点击书名进入修改页面,若想直接修改,需要再加一个字段

    class BookAdmin(admin.ModelAdmin):
        list_display = ('name','price','pub_date')
        list_editable = ('price','pub_date')

    增加字段选择author, filter_horizontal

    class BookAdmin(admin.ModelAdmin):
        list_display = ('name','price','pub_date')
        list_editable = ('price','pub_date')
        filter_horizontal = ('authors',)

    list_per_page

    class BookAdmin(admin.ModelAdmin):
        list_display = ('name','price','pub_date')
        list_editable = ('price','pub_date')
        filter_horizontal = ('authors',)
        list_per_page = 2

    search_fields

    class BookAdmin(admin.ModelAdmin):
        list_display = ('name','price','pub_date')
        list_editable = ('price','pub_date')
        filter_horizontal = ('authors',)
        list_per_page = 2
        search_fields = ('name','id','publish__name')

     list_filter

    class BookAdmin(admin.ModelAdmin):
        list_display = ('name','price','pub_date')
        list_editable = ('price','pub_date')
        filter_horizontal = ('authors',)
        list_per_page = 2
        search_fields = ('name','id','publish__name')
        list_filter = ('pub_date','publish')

    verbose_name

    class Book(models.Model):
        name = models.CharField(max_length=32,verbose_name="姓名")
        price = models.IntegerField("价格")
        pub_date = models.DateField()
        publish = models.ForeignKey("Publish",on_delete=models.CASCADE)
        authors = models.ManyToManyField("Author")

    ording

    class BookAdmin(admin.ModelAdmin):
        list_display = ('name','price','pub_date')
        list_editable = ('price','pub_date')
        filter_horizontal = ('authors',)
        # list_per_page = 2
        search_fields = ('name','id','publish__name')
        list_filter = ('pub_date','publish')
        ordering = ('-price',) # 加"-"倒序

  • 【推广】 阿里云小站-上云优惠聚集地(新老客户同享)更有每天限时秒杀!
    【推广】 云服务器低至0.95折 1核2G ECS云服务器8.1元/月
    【推广】 阿里云老用户升级四重礼遇享6.5折限时折扣!
  • 原文:https://www.cnblogs.com/xiangtingshen/p/10627597.html
Copyright 2008-2020 晋ICP备12007731号-1