Django - 管理员自定义字段显示和行为

Pie*_*NAY 3 html python django django-admin django-widget

让我们想象一下这个模型:

class ScribPart(models.Model):
  name = models.CharField(max_length=50, unique=True)
  text = models.TextField()
Run Code Online (Sandbox Code Playgroud)

我想将一个特定的类附加到该字段text并调用特定的js文件.这样管理页面就像:

...
<script type="text/javascript" src="/static/js/mymarkup.js"></script>
...
<textarea id="id_text" name="text" class="mymarkup"></textarea>
...
Run Code Online (Sandbox Code Playgroud)

如何使用窗口小部件和/或自定义管理表单执行此操作?

Eti*_*nne 5

<script>在管理页面中插入,最简单的方法是:

class ScribPartAdmin(model.ModelAdmin):
    ...
    your normal stuff...
    ...

    class Media:
        js = ('/path/to/your/file.js',)
Run Code Online (Sandbox Code Playgroud)

ModelAdmin媒体定义文档

现在要将class属性添加到textarea我认为最简单的方法是这样的:

from django import forms

class ScribPartAdmin(model.ModelAdmin):
    ...
    your normal stuff...
    ...

    class Meta:
        widgets = {'text': forms.Textarea(attrs={'class': 'mymarkup'})}
Run Code Online (Sandbox Code Playgroud)

覆盖默认小部件文档

我应该补充一点,这种方法适合一次性使用.如果你想多次重用你的字段或JS,那么有更好的方法(字段的自定义小部件,如果JS与字段完全相关,则指定JS文件,扩展模板以在许多地方包含JS文件) .