django中的admin组件之自定义组件的增删改查的完善
昨天我們將自定義列放在類我們自定義的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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FFmpeg下载无损截取HLS视频流
- 下一篇: [HDU5215]Cycle