日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django中的admin组件之自定义组件的增删改查的完善

發(fā)布時(shí)間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django中的admin组件之自定义组件的增删改查的完善 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

昨天我們將自定義列放在類我們自定義的Bookconfig配置類內(nèi),但是這樣就寫死了,因?yàn)楫?dāng)我們訪問publish表的時(shí)候應(yīng)該也有這樣的自定義列,所以我們應(yīng)該將我們的自定義列放在默認(rèn)的配置表里面。應(yīng)該怎么做?

?當(dāng)我們的自定義列挪到默認(rèn)配置類的時(shí)候,我們自定義配置類中的list_display就要發(fā)生改動,

list_display = ["title", "price", "publish",'authors','publishDate',sites.ModelAdmin.edit,sites.ModelAdmin.delete]

而在默認(rèn)配置類中,往list_display添加edit,delete。list_display = ['__str__',edit,delete]。這樣寫會很麻煩。

我們有這樣一個辦法,在默認(rèn)配置類中,我們新構(gòu)建一個列表,然后把我們自定義配置類的list_display添加到這個新列表中,并且把edit,和delete也添加進(jìn)去,這樣在循環(huán)新的list-display的時(shí)候,既能實(shí)現(xiàn)到自己配置類中的list_display,也能實(shí)現(xiàn)默認(rèn)配置類中的list_display,

?

# 默認(rèn)操作函數(shù)def edit(self,obj=None,is_header=False):if is_header: # 如果傳過來的參數(shù)is_header=true則說明是表頭部分return '操作'else: # 如果傳過來的參數(shù)為obj,則說明是表單部分return mark_safe("<a href='/stark/app01/book/%s/change/'>編輯</a>"%obj.pk)def delete(self,obj=None,is_header=False):if is_header:return '操作'else:return mark_safe("<a href='/stark/app01/book/%s/delete/'>刪除</a>" % obj.pk)def check_box(self, obj=None, is_header=False):if is_header:return '操作'else:return mark_safe("<input type='checkbox'pk=%s>" % obj.pk) #視圖函數(shù)
def new_list_display(self):
temp=[]
temp.extend(self.list_display) # 把自己配置類中的list_display添加進(jìn)去,
# 對于沒有自定義配置類的model,就是用默認(rèn)配置類的list_display 注意用的是extend
temp.insert(0,ModelAdmin.check_box) # 在最前面加ModelAdmin.check_box,不要寫成self.check_box 這是個坑,一定不要寫成self.check_box
                        # 如果寫成了self.edit,
說明已經(jīng)在edit這個方法中傳了參數(shù)self,在調(diào)用的時(shí)候,就不需要傳self這個參數(shù)了
temp.append(ModelAdmin.edit)
temp.append(ModelAdmin.delete)
return temp

?

這時(shí)候我們發(fā)現(xiàn),自定義列中的標(biāo)簽寫死了,我們希望訪問每個model都有這個自定義操作列。

這時(shí)候我們想到url的反向解析。

拿一個操作來說,在url中起好name,利用revers反向解析url。替換a標(biāo)簽的href。

寫成函數(shù)之后,就變成這樣:

?

接下來就是利用ModelForm對數(shù)據(jù)進(jìn)行操作了。(復(fù)習(xí)ModelForm知識.)

我們發(fā)現(xiàn),不僅在添加視圖函數(shù)中用到modelform,在編輯,甚至刪除的試圖中也用到modelform。所以可以寫成函數(shù)。

在app01下的stark.py文件下可以寫自己的model form

在頁面中渲染:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>添加數(shù)據(jù)</title><link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css"><link rel="stylesheet" href="/static/css/form.css"> </head> <body> <div class="container"><h3>添加數(shù)據(jù)</h3><div class="row"><div class="col-md-6 col-md-offset-3"><form action="" method="post" novalidate class="form-horizontal">{% csrf_token %}{% for field in form %}<div class="form-group"><label for="" class="col-sm-2 control-label">{{ field.label }}</label>{{ field }}<div><span class="errors pull-right" style="color:red">{{ field.errors.0 }}</span></div></div>{% endfor %}<button class="btn btn-default">提交</button></form></div></div> </div> </body> </html>

接下來就是給list頁面添加頁碼了。

?我們直接將之前寫的分頁拿過來用,

?

轉(zhuǎn)載于:https://www.cnblogs.com/yb635238477/p/9562969.html

總結(jié)

以上是生活随笔為你收集整理的django中的admin组件之自定义组件的增删改查的完善的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。