django admin 新增自定義鏈結方式

2022-10-04 14:42:32 字數 1931 閱讀 4245

背景

最近做專案開發出現乙個需求,就是前端會發來使用者對某一項內容的報錯,報錯資訊中包含出錯內容的id,為了方便管理,需要實現點選這個id直接轉達相應內容的詳情頁面。

效果展示

解決首先在django admin的列表中檢視資料id所代表的jbxdnvstu鏈結

使用瀏覽器的檢查元素功能檢視點選該id所跳轉的鏈結

現在我們知道點選admin頁面跳轉鏈結的格式了。

自定義widget

假如我們的內容id使用charfield欄位儲存,那麼可以這樣自定義乙個widget

html

}是引程式設計客棧入自定義模板標籤的語句,該標籤在下面定義。

python

class mywidget(textinput):

template_name = "mywidget.html"

def render(self, name, value, atjbxdnvstutrs=none, renderer=none):

context = self.get_context(name, value, attrs)

template = loader.get_template(self.template_name).render(context)

return mark_safe(template)

自定義模板過濾器

在views.py所在的目錄下新建乙個資料夾templatetags,注意必須為這個名字。在資料夾中新建乙個myfileter.py檔案和_init_.py檔案。

myfileter.py

# 生成自定義鏈結

@register.filter

def generate_link(value):

id = str(value)

#就是將第二張中的id替換為當前的id就行

return "/admin/learningsource/learningsource/" + id + "/change/"

自定義模型表單

假如我們的模型定義如下

class feedbackmodel(models.model):

error_content_id=models.uuidfield("錯誤編號", primary_key=true, default=uuid.uuid4())

........

在models.py中定義乙個modelform

class feedbackmodelform(modelform):

error_content_id = forms.charfield(label="錯誤編號",widget=mywidget)

class meta:

model = sourcelinkerrorreport

fields = ['error_content_id',.....]

假如該模型在admin.py的模型管理器為

class feedbackmodeladmin(admin.modeladmin):

..........

將上述定義的模型表單新增到模型管理器中

class feedbackmodeladmin(admin.modeladmin):

form=feedbackmodelform

..........

總結使用這種方法可以不用建立乙個空的模型然後重寫它的changelist_view函式實現自定義鏈結,可以給admwww.cppcns.comin介面的文字,等新增鏈結(通過自定義widget就可實現),並且鏈結樣式可以自己定義,使用更方便。

在安全性上,本文的做法實際上相當於自己手動給django admin內建檢視函式傳送請求,和原來django自己自動生成的頁面鏈結沒有任何區別,對自定義鏈結的響應實際上也要經過**django ** admin的認證,安全性是沒問題的。

本文位址: /jiaoben/python/302721.html

django admin自定義登入

這個效果,單位 是user model 的乙個外來鍵company 通過修改form,然後在前端顯示 修改form class authenticationform forms.form base class for authenticating users.extend this to get a...

django admin 新增使用者出現外來鍵約束錯誤

今天在做mxonline專案時,註冊了使用者表進admin後,想在後台新增乙個使用者試試,結果出現了錯誤,經過一番搜尋發現以下兩個解決方法,不過我只用了一種 報錯資訊 integrityerror 1452,u cannot add or update a child row a foreign k...

Django admin簡單操作

1.先在admin中註冊模組 from django.contrib import admin register your models here.from multiorm import models admin.site.register models.book admin.site.regis...