Ajax与Django表单

3 投票
2 回答
530 浏览
提问于 2025-04-16 10:07

我想在我的管理表单中添加Ajax功能,用来编辑一个模型。这个模型有一个列表字段。我希望通过Ajax来创建一系列输入框,并且每个输入框旁边都有添加和删除按钮。当用户点击“添加”或“删除”时,能够自动向服务器发送请求。

我现在遇到的问题是:这个小部件怎么知道它要操作的模型是什么?如果它不知道,那它怎么更新值呢?(我想给前端提供像 api/remove-list-item?pk=foo&item=bar 这样的链接。)

这让我觉得这样做可能不太符合Django框架的一般理念。也许我应该把这些值保存在本地,然后通过和其他数据一样的验证流程来发送它们。但我对怎么做到这一点还有点不确定。

2 个回答

0

在urls.py文件中,创建一个规则,像这样:

(r'^api/remove-list-item/(?P<id>\d+)$', 'yourApp.views.remove'),

然后在你的应用的views文件中,写一些类似下面的内容:

from django.shortcuts import get_object_or_404, redirect

def remove(request, id):
  dbObj = get_object_or_404(YourModel, id=id)
  dbObj.active = False # Or whatever you want to do with the object
  dbObj.save()

  return redirect('some-view')

这样你就可以发送请求,比如说 /api/remove-list-item/123

0

我在做的事情和这个有点像(虽然不是在管理表单里)。我不太确定这样做是否被推荐……但对我来说确实有效。

我在模板中的一个html表单上设置了一个操作,这个操作会调用一个视图,主要任务就是更新数据库里的数据,然后返回一个“成功”的消息(或者我想让它返回的其他内容)。

在模板那边,我还使用了jquery表单插件,这个插件可以用来更新页面上的一个div,显示新的值。

再次强调,我不确定其他人是否会推荐这种做法,但我觉得这样做是有道理的……而且确实运行得很好。

撰写回答