Django管理站点更改列表视图自定义

2024-10-01 02:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我的ModelAdmin模型有一个ModelAdmin子类:

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

enter image description here

实际结果

在我单击成绩等级设置之后

enter image description here

如何连接到我的views.py? 这就是我想在我的视图.py公司名称:

^{2}$

当我尝试这个:

@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 

在我的ModelAdmin子类中:

list_display = ('configuration_select', 'new_NumberOfGrades', 'Rounding','Precision', 'Status',)

enter image description here

有没有办法把它和我的views.py?在

预期结果

这就是我想在我的视图.html公司名称:

enter image description here

所以我想把它和我的视图.py. 在


Tags: pyregister视图adminhtmldisplay子类select
2条回答

您可以通过重写get_urls来更改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并进行修补)来简化上面的代码:

^{pr2}$

重写^{}以设置extra_context。在

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

    def changelist_view(self, request, extra_context=None):
        extra_context = extra_context or {}

        gradeScalesSettings = gradeScalesSetting.objects.all()
        configurations = configuration.objects.all()
        rounding = gradeScalesSetting.objects.all().values_list('Rounding', flat=True).distinct()

        extra_context.update({
            "rounding": rounding,
            "gradeScalesSetting": gradeScalesSettings,
            "configurations": configurations,
        })
        return super().changelist_view(request, extra_context=extra_context)

相关问题 更多 >