gpt4 book ai didi

django - 覆盖管理媒体类

转载 作者:行者123 更新时间:2023-12-03 10:47:37 25 4
gpt4 key购买 nike

给定一个设置富文本编辑器的管理媒体类,例如:

class TutorialAdmin(admin.ModelAdmin):

fields...

class Media:
js = ['/paths/to/tinymce.js',]

我希望能够根据它引用的模型中的字段值选择性地覆盖 js。我在教程模型中添加了一个“use_editor” bool 值。问题是,如何检测当前实例是否设置了 bool 集?我想以这样的方式结束:
class Media:
if self.use_editor:
js = ['/path/to/tinymce.js',]
else:
js = ''

想法?谢谢。

最佳答案

非常感谢 django-users 上的 Sam Lai,我终于有了一个可行的解决方案。事实证明这比预期的要棘手,因为您无法从 Admin 类中直接访问实例上的字段值 - 您需要通过重新定义 Admin 类使用的表单来实现。此外,您需要使用 _media而不是“class Media:”来设置媒体属性。

目标是检测 use_visual_editor 字段的当前实例值并根据其值打开或关闭 javascript 路径(因此作者可以在每个记录的基础上关闭可视化编辑器)。这是最终的工作解决方案:

模型.py

class Tutorial(models.Model):
use_visual_editor = models.BooleanField()

forms.py
from django import forms
from tutorials.models import Tutorial

class TutorialAdminForm(forms.ModelForm):
class Meta:
model = Tutorial

def _media(self):
if self.instance.use_visual_editor == True:
js = ['/paths/to/javascript',]
else:
js = ['']
return forms.Media(js=js)

media = property(_media)

admin.py
from django import forms
....
class TutorialAdmin(admin.ModelAdmin):
form = TutorialAdminForm

完美运行!

关于django - 覆盖管理媒体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2504054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com