python測試開發django-35.xadmin註冊表信息

前言

xadmin後臺若是要對錶的內容增刪改查,跟以前的admin.py文件裏面寫註冊表信息同樣,需在admin.py同一級目錄新建一個adminx.py的文件。
而後在adminx.py文件控制頁面上需顯示的內容。html

models模塊

models模塊跟以前設計表是同樣的,在models.py文件設計表的字段顯示,以Student表爲例。django

# models.py

from django.db import models

# Create your models here.

class Student(models.Model):
    '''學生成績'''
    student_id = models.CharField(max_length=30, verbose_name="學號")
    name = models.CharField(max_length=30, verbose_name="姓名")
    age = models.IntegerField(verbose_name="年齡")
    score = models.IntegerField(verbose_name="分數")

    class Meta:
        verbose_name = "學生成績"    
        verbose_name_plural = verbose_name

若是有表的關聯,以以前的admin後臺一對一關係OneToOneField爲例http://www.javashuo.com/article/p-fpfbtzan-bw.html設計

# models.py

class Card(models.Model):
    '''銀行卡 基本信息'''
    card_id = models.CharField(max_length=30, verbose_name="卡號", default="")
    card_user = models.CharField(max_length=10, verbose_name="姓名", default="")
    add_time = models.DateField(auto_now=True, verbose_name="添加時間")
    
    class Meta:
        verbose_name = "銀行卡帳戶_基本信息"
        verbose_name_plural = '銀行卡帳戶'
    
    def __str__(self):
        return self.card_id


class CardDetail(models.Model):
    '''銀行卡詳情信息'''
    card = models.OneToOneField(Card,
                               on_delete=models.CASCADE,
                               verbose_name="卡號"
                                )
    tel = models.CharField(max_length=30, verbose_name="電話", default="")
    mail = models.CharField(max_length=30, verbose_name="郵箱", default="")
    city = models.CharField(max_length=10, verbose_name="城市", default="")
    address = models.CharField(max_length=30, verbose_name="詳細地址", default="")

    class Meta:
        verbose_name = "帳戶_我的資料"
        verbose_name_plural = verbose_name
    
    def __str__(self):
        return self.card.card_user

adminx.py文件

在admin.py文件的同一目錄新建一個adminx.py(注意只能是adminx.py,不能叫其它的名稱)
在adminx.py裏與以前的admin.py代碼有一些不同code

  • 以前import admin, 這裏import xadmin
  • 以前註冊表時繼承admin.ModelAdmin, 這裏繼承object
  • 以前inlines 關聯的表(class MoreInfo)繼承admin.StackedInline, 這裏繼承object
  • 以前能夠有2種註冊方式,能夠用裝飾器方法@admin.register(表類名),這裏只能經過xadmin.site.register(表類名, xxx)方式
# adminx.py
import xadmin
from .models import Student, Card, CardDetail


class ControlStudent(object):
    # 顯示的字段
    list_display = ('student_id', 'name', 'age', 'score')
    # 搜索條件
    search_fields = ('name',)

    # 每頁顯示10條
    list_per_page = 10


class MoreInfo(object):
    model = CardDetail

class ControlCard(object):
    list_display = ["card_id", "card_user", "add_time"]

    # 在Card頁面顯示更多信息CardDetail
    inlines = [MoreInfo]

# 註冊Student表
xadmin.site.register(Student, ControlStudent)

# 註冊card表,關聯CardDetail
xadmin.site.register(Card, ControlCard)

xadmin列表頁顯示

登陸xadmin後臺後頁面顯示htm

學生成績表編輯頁面blog

銀行卡帳戶使用inlines關聯過來的頁面顯示繼承

相關文章
相關標籤/搜索