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關聯過來的頁面顯示