2

我正在从 PHP 转换为 Django,这证明是一场真正的斗争。我想做一个内联编辑(用 PHP 和 Ajax 轻而易举),但我真的,真的卡住了。对不起,提前,对于下面的大量代码。

我已经渲染了 2 个 div,其中包含许多字段,都一样。一个显示,另一个隐藏。当您单击编辑按钮时,将显示要更新的 div,并且数据位于输入框和选择下拉列表中,以便用户进行更改。HTML 如下”

<div id="display1">
    <span style="width:50px;">
      <button class="edit" onclick="javascript:toggle('1')">EDIT</button>
    </span>
    <span>
        <a href="/recruit/1/">Blair Leighton</a>
    </span>
    <span>
        Intertrust Private Partners 
    </span>
    <span>
        Japan 
    </span>
    <span>
        hands off 
    </span>
    <span>
        not connected 
    </span>
    <span>
        notes 
    </span>
</div>
<div class="noshow" id="edit1">
    <span style="width:100px;"><button class="update" id="1">update</button></span>
    <span>
        Blair Leighton
    </span>
    <span style="width:220px;">
        <input type="textfield" style="width:210px;" id="new_company" value="Intertrust Private Partners" />
    </span>
    <span>
        <input type="text" id="new_country" value="Japan" />
    </span>
    <span>
        <select id="new_status">
            <option value="no contact">no contact</option>
            <option value="no contact">hands off</option>
            <option value="no contact">ongoing</option>
            <option value="no contact">sent email</option>
            <option value="no contact">waiting</option>
            <option value="no contact">trash</option>
        </select>
    </span>
    <span>
        <input type="text" id="new_connection" value="not connected" />
    </span>
    <span style="width:220px;">
        <input type="textfield" style="width:210px;" id="new_notes" value="notes" />
    </span>
</div>

事实上,还有许多其他 div 具有顺序 ID display2、edit2 等。

通过单击切换按钮显示编辑 div 后,我想从每个字段(在 jquery 数组中)收集数据,然后将其传递给 django 视图以更新数据库。

然后,保持在刷新以显示更新值的同一页面上。

我怎样才能做到这一点?

模型.py 是:

从 django.db 导入模型

class recruit(models.Model):
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=35)
    position = models.CharField(max_length=55)
    company = models.CharField(max_length=55)
    country = models.CharField(max_length=125)
    connection = models.CharField(max_length=55)
    status = models.CharField(max_length=55)
    phone = models.CharField(max_length=55)
    placed = models.CharField(max_length=55)
    placed_with = models.CharField(max_length=55)
    skype = models.CharField(max_length=55)
    notes = models.TextField()
    company_url = models.CharField(max_length=125)

非常感谢所有帮助。谢谢你。

理查德

4

2 回答 2

1

有 django 应用程序可以为你完成这项工作,尽管我从未使用过它们。

快速谷歌搜索给了我这个: http: //pypi.python.org/pypi/django-inplaceedit,也许有更多甚至更好的解决方案。

如果您真的想自己编写代码,我建议您使用django-ModelForm 而不是手动将所有字段放在一起。

然后你可以用一些javascript挂钩你的表单提交,让它用AJAX提交。我正在使用jQuery来完成这样的任务,但任何其他 js 库(原型、dojo、mootools ......)也可以完成这项工作。

在 django 中,只需保护ModelForm文档中描述的数据,并将其传递回在响应中呈现的数据。你的 AJAX 调用的 onSuccess 用你的响应文本更新页面,你就完成了。

对于视图,您还可以使用 django 的通用更新视图

您可能对此也感兴趣:https ://stackoverflow.com/questions/708801/whats-the-best-edit-in-place-plugin-for-jquery

于 2013-02-05T14:45:30.587 回答
0

我看不出这在 Django 和 PHP 中有什么不同。原理完全相同:JS 收集数据,通过 Ajax 发布数据,并使用响应更新 HTML。服务器端代码只是简单地保存并返回 Ajax 的结果:可以是 JSON,也可以是预渲染的 HTML 片段。

于 2013-02-06T01:52:27.470 回答