zoukankan      html  css  js  c++  java
  • Django组件-admin

    Django组件-admin

     

    一. admin组件的使用

      Django 提供了基于 web 的管理工具。

      Django 自动管理工具是 django.contrib 的一部分。你可以在项目的 settings.py 中的 INSTALLED_APPS 看到它:

    # Application definition

    INSTALLED_APPS = [
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'app01.apps.App01Config',
    ]

      django.contrib是一套庞大的功能集,它是Django基本代码的组成部分。

    1. 激活管理工具

      通常我们在生成项目时会在 urls.py 中自动设置好。

    from django.contrib import admin
    from django.urls import path

    urlpatterns = [
      path('admin/', admin.site.urls),
    ]

      当这一切都配置好后,Django 管理工具就可以运行了。

    2. 使用管理工具

      在使用admin组件之前,需要将app下的模型类,进行注册。

      app下 models.py 文件:

    from django.db import models


    class Book(models.Model):
      title = models.CharField(max_length=32)
      price = models.DecimalField(max_digits=5, decimal_places=2)
      pub_date = models.DateField()
      publish = models.ForeignKey("Publish", on_delete=models.CASCADE)
      authors = models.ManyToManyField("Author")

      def __str__(self):
          return self.title


    class Publish(models.Model):
      name = models.CharField(max_length=32)
      city = models.CharField(max_length=64)
      email = models.EmailField()

      def __str__(self):
          return self.name


    class Author(models.Model):
      name = models.CharField(max_length=32)
      age = models.SmallIntegerField()
      au_detail = models.OneToOneField("AuthorDetail", on_delete=models.CASCADE)

      def __str__(self):
          return self.name

    class AuthorDetail(models.Model):
      gender_choices = (
          (0, "女"),
          (1, "男"),
          (2, "保密"),
      )
      gender = models.SmallIntegerField(choices=gender_choices)
      tel = models.CharField(max_length=32)
      addr = models.CharField(max_length=64)
      birthday = models.DateField()

     

      启动服务器,然后在浏览器中访问 http://127.0.0.1:8000/admin/,得到登陆界面。

      你可以通过命令 python manage.py createsuperuser 来创建超级用户。然后,来进行登录操作。

      为了让 admin 界面管理某个数据模型,我们需要先注册该数据模型到 admin。

      在admin.py中只需要将Mode中的某个类注册,即可在Admin中实现增删改查的功能,如:

    `admin.site.register(models.Book, )`

      但是,这种方式比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin进行操作。

    3. admin的定制

      我们可以自定制类继承 admin.ModelAdmin 类,来扩展方法。有以下两种方式注册:

    # 方式一:
    class BookAdmin(admin.ModelAdmin):

      list_display = ('title', 'price', 'publish')

    admin.site.register(models.Book, BookAdmin)


    # 方式二:
    @admin.register(models.Book)
    class BookAdmin(admin.ModelAdmin):

      list_display = ('title', 'price', 'publish')

      ModelAdmin中提供了大量的可定制功能,下面我们列举一下常用的功能:

    class BookAdmin(admin.ModelAdmin):

      list_display = ('title', 'price', 'publish', 'show_author') # 定制展示的列
      list_display_links = ('price', ) # 定制跳转的列
      list_filter = ('publish', 'authors') # 定制过滤列
      search_fields = ('title', 'price') # 定制模糊搜索列
      list_editable = ('title', ) # 定制可以直接编辑的列
      actions = ['patch_init'] # 定制批量处理方法
      ordering = ['-price'] # 通过该列进行排序,默认升序

      def show_author(self, obj): # 自定制展示列
          return "|".join([i.name for i in obj.authors.all()])

      def patch_init(self, request, queryset): # 初始化单价
          queryset.update(price=100)

      patch_init.short_description = "批量初始化" # 设置操作名称


    admin.site.register(models.Book, BookAdmin)
    admin.site.register(models.Publish, PublishAdmin)
    admin.site.register(models.Author)
    admin.site.register(models.AuthorDetail)

     

     

  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/zengxiaowen/p/11838779.html
Copyright © 2011-2022 走看看