javascript - 如何覆盖 Django 的 ModelAdmin 的 "media"属性并使其动态化?

标签 javascript django django-admin django-modeladmin

最终,我想包含/排除基于...的某些 javascript 文件。简单地单独定义 Media 类是行不通的,因为它只被评估一次。

我知道我可以通过制作自定义管理模板来做到这一点,但我想知道是否有一种简单的方法可以通过使媒体属性动态化来做到这一点。

这是我目前所拥有的:

from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
    model = MyModel
    ...

    @property
    def media(self):
        media = super(MyModelAdmin, self).media
        if whatever_condition_I_want:
            # somehow add "my/js/file3.js"
        return media

    class Media:
        css = {
            "all": (
                "my/css/file1.css",
                "my/css/file2.css",
            )
        }
        js = (
            "my/js/file1.js",
            "my/js/file2.js",
        )

这几乎可行,但我发现调用 super(MyModelAdmin, self).media 会忽略我当前类的媒体定义。在四处寻找时,我发现这是因为父类的媒体属性被 django.forms.widgets.media_property 包裹(通过 MediaDefiningClass)并且因为我重写了媒体,我的媒体属性(property)没有被包装。我尝试通过以下方式手动包装它:

from django.forms import media_property
MyModelAdmin.media = media_property(MyModelAdmin)

但是 media_property 导入失败。

如何让它包含静态媒体和动态媒体,以及如何以 django 满意的方式添加动态媒体?

最佳答案

在写完上述问题后不久,我发现了一种可行的方法。我没有定义 Media 类,而是通过 media 方法手动添加我的所有 css/js:

from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
    model = MyModel
    ...

    @property
    def media(self):
        media = super(MyModelAdmin, self).media
        css = {
            "all": (
                "my/css/file1.css",
                "my/css/file2.css",
            )
        }
        js = [
            "my/js/file1.js",
            "my/js/file2.js",
        ]
        if whatever_condition_I_want:
            js.append("my/js/file3.js")
        media.add_css(css)
        media.add_js(js)
        return media

关于javascript - 如何覆盖 Django 的 ModelAdmin 的 "media"属性并使其动态化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302175/

相关文章:

javascript - 关闭替代方案

javascript - 如何使用 jQuery 在淡出元素之前暂停?

javascript - 在鼠标悬停时显示(悬停)图表并在鼠标悬停时隐藏图表

python - Django - 表单文件字段错误 "This field is required"

python - 是否可以将 django 模型类与 ManyToMany 关系合并?

python - Django Admin list_display 添加列【统计相关外键的记录】

javascript - 我可以为构成 D3 轴的文本和线条元素赋予唯一的类吗?

linux - Django 文件夹权限设置?

django - 如何像在 Django Admin 中一样在表单中创建外键链接字段?

django-admin - Django管理员选择框排序