Django ModelMultipleChoiceField 小部件未呈现

Posted

技术标签:

【中文标题】Django ModelMultipleChoiceField 小部件未呈现【英文标题】:Django ModelMultipleChoiceField Widget not Rendering 【发布时间】:2017-09-11 03:44:21 【问题描述】:

我正在尝试使用内置的 django 管理小部件 ModelMultipleChoiceField 在表单中呈现类似的内容:

我已遵循其他人的建议here,并查看了documentation。但我得到了一个半完整的小部件;只显示一个框,并且所有关联的按钮都没有出现:

另外,页面加载时,报如下错误:

Uncaught ReferenceError: addEvent is not defined at (index):1665

这是index 中导致错误的行:

<script type="text/javascript">
    addEvent(window, "load", function(e) SelectFilter.init("id_employee_selection", "__unicode__", 0, "/static/admin/"); );
</script>

我在 django 库中的任何地方都找不到 addEvent.js,即使它在某些 django tickets 上被引用。

供参考,下面是我的formhtml

表格:

from django import forms

class EventAttendeesForm(forms.Form):

    from employees.models import Employee
    from django.contrib.admin.widgets import FilteredSelectMultiple

    employee_selection = forms.ModelMultipleChoiceField(
                    queryset=Employee.objects.all(),
                    widget=FilteredSelectMultiple("__unicode__", is_stacked=False, attrs='rows':20)
                    )

    def __init__(self, *args, **kwargs):
        super(EventAttendeesForm, self).__init__(*args, **kwargs)
        self.fields['employee_selection'].label = "Employees"

HTML 片段:

<link href="/static/admin/css/widgets.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="/jsi18n/"></script> 
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>

<form method='POST' action='' enctype='multipart/form-data'>% csrf_token %
 form 
<input type='submit' value='Add Item(s)' />
</form>

 media 

如何正确呈现ModelMultipleChoiceField 小部件?

我试过这个hack,但它不起作用。

非常感谢。

【问题讨论】:

【参考方案1】:

想通了:在表单加载之前加载所有 form.media 和相关的 javascripts 至关重要。

所以,而不是:

<link href="/static/admin/css/widgets.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="/jsi18n/"></script> 
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>

<form method='POST' action='' enctype='multipart/form-data'>% csrf_token %
 form 
<input type='submit' value='Add Item(s)' />
</form>

 media 

执行此操作(脚本 + form.media 放在 form 之前:

<script type="text/javascript" src="/jsi18n/"></script> 
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>

 media 

<form method='POST' action='' enctype='multipart/form-data'>% csrf_token %
 form 
<input type='submit' value='Add Item(s)' />
</form>

【讨论】:

以上是关于Django ModelMultipleChoiceField 小部件未呈现的主要内容,如果未能解决你的问题,请参考以下文章

Django之路

Django系列

django 错误

mac电脑安装django ,运行django报错解决

Django 大神带你飞系列~走进Django

django的文档