HY!
我试图将django ajax过滤字段用于多对多关系(在管理员之外!用于员工和非员工用户。)。我浏览了这个加载项的主页上的介绍,结果是,我无法让它运行: - (
我想知道我做错了什么,希望能在这里找到一些帮助。
因此,我包括了我需要的所有东西。这是我的表格。class MarketingActionForm(forms.ModelForm):
contact = ManyToManyByLetter(Contact, field_name="first_name")
class Meta:
model = MarketingAction
exclude = ('created_by',)
class Media:
js = (
settings.ADMIN_MEDIA_PREFIX + "js/SelectBox.js",
settings.ADMIN_MEDIA_PREFIX + "js/SelectFilter2.js",
settings.MEDIA_URL + "js/jquery.js",
settings.MEDIA_URL + "js/ajax_filtered_fields.js",
)
我的项目urls.py
(r'^ajax_filtered_fields/', include('ajax_filtered_fields.urls')),
(r'^dynamic-media/jsi18n/$', 'django.views.i18n.javascript_catalog'),
我的网页中包含的javascript:
{% load adminmedia %}
<!--<script type="text/javascript" src="/admin/jsi18n/"></script>-->
<script type="text/javascript" src="/dynamic-media/jsi18n/"></script>
<script type="text/javascript" src="{% admin_media_prefix %}js/core.js"></script>
所有这些链接都有效。我通过点击链接测试它。因此,我认为所有需要的.js都可用。
我的第一个问题是:
1)标签{%load adminmedia%}应该创建任何输出吗?因为.html文件中没有输出。
第二个问题:
2)在.html中创建以下代码。
<a class="ajax_filter_choice"
href="javascript:void(0)"
onclick="ajax_filtered_fields.getManyToManyJSON('id_contact', 'crm', 'Contact', 'first_name__istartswith=w', 'None')">w</a>
我如何测试这个ajax调用是否成功?或者是否可以引用此函数(ajax_filtered_fields.getManyToManyJSON)。因为当我点击链接时似乎没有任何反应。
第三个问题:
3)如果您点击下面的链接,您会看到已创建的内容。我只看到一个盒子,如果我点击链接没有任何反应。仅显示以“a”开头的联系人。
确定不是真正的问题..更多信息; - )
screenshot of the (wrong) result
如果这是一个专业的过滤字段阅读并帮助我,那将是很棒的...提前感谢!
EDIT1:
在玩了萤火虫后,我得到以下两个错误:SelectFilter is not defined
anonymous()1 (line 424)
anonymous()jquery.js (line 19)
anonymous([function(), function(), function(), 1 more...], function(), Object name=F)jquery.js (line 12)
anonymous()jquery.js (line 19)
anonymous()jquery.js (line 19)
[Break on this error] SelectFilter.init("id_c... "http://localhost:8000/media/admin/");\n1 (line 424)
ajax_filtered_fields is not defined
function onclick(event) { ajax_filtered_fields.getManyToManyJSON("id_contact", "crm", "Contact", "first_name__istartswith=o", "None"); }(click clientX=470, clientY=390)
现在我问自己我必须添加什么才能使这两个功能可用于页面!?
EDIT2:
好吧,看起来这在MarketingActionForm中不起作用:
class Media:
js = (
settings.ADMIN_MEDIA_PREFIX + "js/SelectBox.js",
settings.ADMIN_MEDIA_PREFIX + "js/SelectFilter2.js",
settings.MEDIA_URL + "js/jquery.js",
settings.MEDIA_URL + "js/ajax_filtered_fields.js",
)
但是当我打印出网址时,他们是正确的。嗯.. 另一个问题是我为什么在这里引用“js / SelectFilter2.js”和html引用SelectFilter.js中生成的javascript部分?
EDIT3:
通过print form.media
打印出正确的网址<script type="text/javascript" src="http://localhost:8000/media/admin/js/SelectBox.js"></script>
<script type="text/javascript" src="http://localhost:8000/media/admin/js/SelectFilter2.js"></script>
<script type="text/javascript" src="http://localhost:8000/media/js/jquery.js"></script>
<script type="text/javascript" src="http://localhost:8000/media/js/ajax_filtered_fields.js"></script>
这些都是有效的。真奇怪。 如果我将这些包含添加到我的base.html上面提到的错误消失了!有没有人知道为什么django会这样做?
因此领先一步。但是下一个错误是在SelectBox.js中:
错误:框为空
var SelectBox = {
2 cache: new Object(),
3 init: function(id) {
4 var box = document.getElementById(id);
5 var node;
6 SelectBox.cache[id] = new Array();
7 var cache = SelectBox.cache[id];
8 for (var i = 0; (node = box.options[i]); i++) {
9 cache.push({value: node.value, text: node.text, displayed: 1});
10 }
11 },
id =“id_contact_from” 在第4行中,脚本在html主体中搜索此元素,在第8行中找不到它并崩溃,因为box是Null。 是否应该通过ajax-filtered-fields自动创建此元素?我必须自己提供这个元素吗?我在文档中没有找到任何关于此的内容。