1. 程式人生 > 實用技巧 >python測試開發django(33)--xadmin登錄檔資訊

python測試開發django(33)--xadmin登錄檔資訊

前言

xadmin後臺如果要對錶的內容增刪改查,跟之前的admin.py檔案裡面寫登錄檔資訊一樣,需在admin.py同一級目錄新建一個adminx.py的檔案。

然後在admin.py檔案控制頁面上需顯示的內容。

models模組

models模組跟之前設計表是一樣的,在models.py檔案設計表的欄位顯示,以Studentts表為例。

# coding:utf-8
from django.db import models

# Create your models here.
class Studentts(models.Model):
    '''學生成績'''
    student_ids = models.CharField(max_length=30, verbose_name="學號")
    names = 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為例

class Cardds(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 CardDetaills(models.Model):
    '''銀行卡詳情資訊'''
    card = models.OneToOneField(Cardds,
                                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程式碼有一些不一樣

之前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 Studentts,Cardds,CardDetaills
class ControlStudent(object):
    # 顯示的欄位
    list_display = ('student_ids', 'names', 'age', 'score')
    # 搜尋條件
    search_fields = ('name',)

    # 每頁顯示10條
    list_per_page = 10


class MoreInfo(object):
    model = CardDetaills

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

    # 在Card頁面顯示更多資訊CardDetail
    inlines = [MoreInfo]

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

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

 執行:

python manage.py makemigrations

python manage.py migrate

python manage.py runserver 

遇到報錯1

開啟debug.py,找到 with Path(CURRENT_DIR, 'templates', 'technical_500.html').open() as fh: 將其改為:

with Path(CURRENT_DIR, 'templates', 'technical_500.html').open(encoding="utf-8") as fh:

問題2:不同工程下,使用同一資料庫,app應用名相同,資料庫相同,python manage.py migrate建立表時,提示“No migrations to apply”;

解決辦法:https://blog.csdn.net/weixin_45921256/article/details/104555872

問題3:報錯:django.db.utils.ProgrammingError:(1146,"Table" '表名' doesn't exist)

在資料庫中刪除一張表,重新執行python manage.py migrate時出錯,提示不存在這張表;

解決辦法:https://blog.csdn.net/weisubao/article/details/77187876

xadmin列表頁面展示

開啟http://127.0.0.1:8000/xadmin,登入後,後臺頁面顯示;

學生成績新增頁面;

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