Python Django管理员站点更改\u列表视图自定义

Python Django管理员站点更改\u列表视图自定义,python,django,django-admin,overriding,django-modeladmin,Python,Django,Django Admin,Overriding,Django Modeladmin,我的gradescalsettings模型有一个子类ModelAdmin: @admin.register(gradeScalesSetting) class gradeScalesSettingAdmin(admin.ModelAdmin): list_display = ('configuration_select', 'NumberOfGrades', 'Rounding','Precision', 'Status',) change_list_template = 'ad

我的
gradescalsettings
模型有一个子类
ModelAdmin

@admin.register(gradeScalesSetting)
class gradeScalesSettingAdmin(admin.ModelAdmin):
    list_display = ('configuration_select', 'NumberOfGrades', 'Rounding','Precision', 'Status',)
    change_list_template = 'admin/Homepage/view.html'

实际结果 单击等级比例设置后

如何将其连接到my views.py? 这就是我想在my views.py中编写的代码:

def gradescales(request):
    gradeScalesSettings = gradeScalesSetting.objects.all()
    configurations = configuration.objects.all()
    rounding = gradeScalesSetting.objects.all().values_list('Rounding', flat=True).distinct()
    print(rounding)
    return render(request, 'Homepage/gradescale.html', {"rounding": rounding,"gradeScalesSetting":gradeScalesSettings,"configurations":configurations})
当我尝试这样做时:

@admin.register(gradeScalesSetting)
class gradeScalesSettingAdmin(admin.ModelAdmin):
    def new_NumberOfGrades(self, obj):
        if obj.NumberOfGrades == 'Grade Scale Settings':
            return '<a href="view.html" </a>'  # this url will redirect to your 

有没有办法将它连接到my views.py

预期结果 这就是我想在my view.html中显示的内容:

这就是为什么我想将它连接到我的views.py。

覆盖以设置
额外上下文

@admin.register(等级设置)
类等级ScaleSettingAdmin(admin.ModelAdmin):
列表显示=(‘配置’、‘等级数’、‘舍入’、‘精度’、‘状态’、)
更改列表模板='admin/Homepage/view.html'
def变更列表视图(自身、请求、额外上下文=无):
额外上下文=额外上下文或{}
GradeScaleSettings=GradeScaleSetting.objects.all()
configurations=configuration.objects.all()
舍入=gradescalSetting.objects.all().values\u list('rounding',flat=True).distinct()
额外上下文更新({
“四舍五入”:四舍五入,
“等级等级设置”:等级等级设置,
“配置”:配置,
})
return super().changelist\u视图(请求,额外上下文=额外上下文)

您可以通过覆盖
获取URL来更改ModelAdmin的路由:

class gradeScalesSettingAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super().get_urls()
        pat = [i for i in urls if str(i.name).endswith('changelist')][0]  # Find needed path object to replace
        index = urls.index(pat)
        urls[index] = path(pat.pattern._route, gradescales)
        return urls
通过这种方式,您可以完全控制用于管理页面的视图,甚至可以根据需要添加其他页面(不仅仅是变更列表和编辑视图)

如果不需要其他默认视图(如对象编辑页),可以通过替换原始URL而不是搜索所需URL并进行修补来简化上述代码:

class gradeScalesSettingAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = [
            path('', gradescales)
        ]
        return urls

view.html和gradescale.html之间有什么区别?
class gradeScalesSettingAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = [
            path('', gradescales)
        ]
        return urls