Django - 管理员自定义字段显示与行为
我们来想象一下这个模型:
class ScribPart(models.Model):
name = models.CharField(max_length=50, unique=True)
text = models.TextField()
我想给字段 text
添加一个特定的类,并且调用一个特定的js文件。这样,管理员页面就会像这样:
...
<script type="text/javascript" src="/static/js/mymarkup.js"></script>
...
<textarea id="id_text" name="text" class="mymarkup"></textarea>
...
我该如何通过一个小工具和/或自定义的管理员表单来实现这个呢?
3 个回答
0
你可以用这个代码把你的表单发送为json格式,然后进行获取(检查)。
results = ScribPart.all()
for r in results :
if r.test == id_text:
self.response.out.write("<script type='text/javascript' src='/static/js/"+r.name+"mymarkup.js'></script>")
2
你需要创建一个模板,把它放在 templates/admin/change_form_scribpart.html 这个位置,内容如下:
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block content %}
<script type="text/javascript" src="/static/js/mymarkup.js"></script>
{{ block.super }}
{% endblock %}
另外,别忘了在你的 ScribPart ModelAdmin 中激活这个新的管理员模板:
class ScribPartAdmin(admin.ModelAdmin):
ordering = ...
fieldsets = ...
change_form_template = "admin/change_form_scribpart.html"
5
在管理页面插入一个 <script>
的最简单方法就是:
class ScribPartAdmin(model.ModelAdmin):
...
your normal stuff...
...
class Media:
js = ('/path/to/your/file.js',)
现在,要给 textarea
添加 class
属性,我觉得最简单的方法是这样做:
from django import forms
class ScribPartAdmin(model.ModelAdmin):
...
your normal stuff...
...
class Meta:
widgets = {'text': forms.Textarea(attrs={'class': 'mymarkup'})}
我还要补充一下,这种方法适合一次性使用。如果你想多次重用你的字段或JavaScript,还是有更好的方法(比如为字段创建自定义小部件,如果JavaScript只和这个字段相关的话,可以指定JS文件,或者扩展模板在多个地方包含一个JS文件)。