仿照admin實現乙個自定義的增刪改查的元件

2022-08-01 11:12:14 字數 4201 閱讀 3047

from django.db import

models

#create your models here.

class

author(models.model):

nid = models.autofield(primary_key=true)

name = models.charfield(max_length=32)

age =models.integerfield()

#與authordetail建立一對一的關係

authordetail=models.onetoonefield(to="

authordetail

", on_delete=models.cascade)

def__str__

(self):

return

self.name

class

authordetail(models.model):

nid = models.autofield(primary_key=true)

birthday =models.datefield()

telephone =models.bigintegerfield()

addr = models.charfield(max_length=64)

class

publish(models.model):

nid = models.autofield(primary_key=true)

name = models.charfield(max_length=32)

city = models.charfield(max_length=32)

email =models.emailfield()

def__str__

(self):

return

self.name

class

book(models.model):

nid = models.autofield(primary_key=true)

title = models.charfield(max_length=32)

publishdate =models.datefield()

price = models.decimalfield(max_digits=5, decimal_places=2)

#與publish建立一對多的關係,外來鍵字段建立在多的一方

publish=models.foreignkey(to="

publish

",to_field="

nid", on_delete=models.cascade)

#與author表建立多對多的關係,manytomanyfield可以建在兩個模型中的任意乙個,自動建立第三張表

authors=models.manytomanyfield(to='

author',)

def__str__

(self):

return self.title

2、啟動:類似於admin

#經原始碼分析,admin就是這樣先導入這個

from django.utils.module_loading import

autodiscover_modules

class

name = '

stark

'def

ready(self):

autodiscover_modules(

"stark

")3、註冊以及url的設計

首先在stark的下邊建立乙個service包,建立乙個sites.py,

裡邊放全域性類以及預設配置類

"""預設配置類

"""list_display =

def__init__

(self, model):

self.model =model

deflistview(self, request):

print(self) # 當前訪問模型表的配置類物件

print(self.model) # 當前訪問模型表

"""stark元件的全域性類

"""def

__init__

(self):

self._registry ={}

def register(self, model, admin_class=none):

#設定配置類

ifnot

admin_class:

admin_class =modelstark

self._registry[model] =admin_class(model)

defget_urls(self):

temp =

for model, config_obj in

self._registry.items():

model_name =model._meta.model_name

#config_obj 獲取的就是每個for迴圈中的bookconfig(book),publish,author遍歷的物件

'''temp=[

url(r"^$", bookconfig(book).listview),

url(r"add/$", bookconfig(book).addview),

url(r"(\d+)/change/$", bookconfig(book).changeview),

url(r"(\d+)/delete/$", bookconfig(book).delview),

], none, none))

###########

url(r"^$", modelstark(publish).listview),

url(r"add/$", modelstark(publish).addview),

url(r"(\d+)/change/$", modelstark(publish).changeview),

url(r"(\d+)/delete/$", modelstark(publish).delview),

], none, none))

]'''return

temp

@property

defurls(self):

return

self.get_urls(), none, none

site = adminsite()

實現乙個自定義元件

如果要建立乙個自定義元件,你需要重寫uicomponent類的某些方法,最少需要重寫如下方法 建構函式,createchildren commitproperties measure layoutchrome updatedisplaylist 基礎語句結構如下 package mycomponen...

Vue自定義元件 簡單實現乙個自定義元件

在用vue構建專案的過程中,我們有時會用到別人開發的元件如vue router 使用他人元件的正常步驟如下 1 命令列進行安裝,執行install 2 在vue專案中的入口檔案main.js中,進行匯入 3 然後用vue.use plugin 引入該元件。我們也可以創造屬於自己的元件,具體步驟如下 ...

Vue自定義元件 簡單實現乙個自定義元件

在用vue構建專案的過程中,我們有時會用到別人開發的元件如vue router 使用他人元件的正常步驟如下 1 命令列進行安裝,執行install 2 在vue專案中的入口檔案main.js中,進行匯入 3 然後用vue.use plugin 引入該元件。我們也可以創造屬於自己的元件,具體步驟如下 ...