django ajax过滤字段 - 搜索bug

时间:2009-12-29 13:36:23

标签: django

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自动创建此元素?我必须自己提供这个元素吗?我在文档中没有找到任何关于此的内容。

1 个答案:

答案 0 :(得分:1)

我如何测试这个ajax调用是否成功?

使用firebug。它对任何Web开发人员都是必须的。