Django:如何在ajax中返回模型表单集并在模板中使用

2024-04-24

我需要在运行时使用ajax动态地将表单添加到我的表单集中,我指的是使用 Ajax 将表单动态添加到 Django 表单集 https://stackoverflow.com/questions/501719/dynamically-adding-a-form-to-a-django-formset-with-ajax

我在同一页面上有多个具有不同前缀的表单集。

我的模型是这样设计的: 一个用户可以拥有多部电话。一部电话可以有多条线路(如果需要详细信息)“通过”表单集中的关系字段访问多对多 https://stackoverflow.com/questions/11021242/accessing-many-to-many-through-relation-fields-in-formsets

一旦用户添加了新电话,我就会使用 ajax 保存该电话。视图如下

def addUserPhone(request, customer_id, location_id, user_id, **kwargs):
error_msg = u"No POST data sent."
context = {}
if request.is_ajax():
            if request.method == "POST":
                user = End_User.objects.get(id=user_id)
                phone_client = PartialPhone_ClientForm(request.POST, prefix='new_client')
                instance = phone_client.save()
                #associate user to a phone
                instance.end_user.add(user)

                #Creating an empty lineFormset for a phone
                LineFormSet = modelformset_factory(Line, form=Line_Form, can_delete=True)
                client_lines  = LineFormSet(queryset=Line.objects.none(), prefix='phone_client_'+str(instance.id))

                # how to return the two objects instance and client_lines back to the template?? 
                #format = 'json'
                #mimetype = 'application/javascript'
                #data = serializers.serialize(format, [instance])
                #return HttpResponse(data)

                #can we return as a context?? this gives me only a string "phoneline_set" in the template   
                context['phone'] = instance
                context['line_set'] = client_lines
                return HttpResponse(context)
            else:
                error_msg = u"Insufficient POST data (need 'Name ' and 'Telephone Number'!)"

else:
        error_msg = "Non Ajax"
return HttpResponseServerError(error_msg)

现在返回电话实例和 LineFormSet 返回视图以在模板中渲染的最佳方法是什么?

如果我只返回上下文,我的视图仅获得字符串“phoneline_set”。但我想做一些类似的事情

  $.post("addUserPhone/",phoneData,function(data){
            $('.scroll').append("<h2> {{ line_set }} </h2>")

            });

如果我使用 Json 序列化并传递,如何传递 LineFormSet 并在模板中使用它? 目前,如果我尝试序列化我的 client_lines 表单集,我会收到错误 AttributeError:“LineFormFormSet”对象没有属性“_meta”

任何帮助表示赞赏,谢谢!


只是按照评论中的要求详细阐述丹尼尔的答案。

Django 是一个MVC 风格的框架。使用模型来存储和访问数据。在 Django 中,控制器称为视图,它的作用是从具有特定 URL 的用户获取请求,获取可能与该 url 关联的一些数据,然后通过某个模板推送该数据,该模板将使用视图提供的数据为了填充模板内的占位符。

这是一个解释所有方面的简单示例。想象一下,有一个网站,其中有一个书籍数据库。因此,您的模型将存储与每本书相关的信息 - 标题、作者、ISBN 号等。

# models.py
class Book(models.Model):
    title = models.CharField(max_length=64)
    author = models.CharField(max_length=64)
    isbn = models.CharField(max_length=64)

现在您要添加一个 URLexample.com/book/<id>/这将显示有关指定 id 的图书的所有信息。为此,需要做几件事。首先 Django 控制器必须捕获具有此模式的 url。您可以在 urls.py 文件中指定 url 模式。

# urls.py
urlpattern('',
    url(r'^book/(?P<id>\d+)/$', views.book),
)

Since urls.py指定 url 模式和视图之间的映射,它告诉 Django 每当用户访问具有指定模式的 URL 时,Django 必须将请求发送给视图book它将知道该怎么做。此外,Django 会将书籍 ID 传递给视图。

# views.py
def book(request, id):
    # get the book
    book = get_object_or_404(Book, pk=id)
    context = {
        'book': book
    }
    return render_to_response('book_template.html', context)

因此,在视图内部,给定书籍的 ID,它使用模型从数据库中查找书籍,如果找不到,则会向用户返回 404 错误。然后它会填充一个我称之为的字典context以及一些将传递给模板的值。模板的工作就是把这个context字典并使用其中的值来填充模板内的一些占位符。

# book_template.html
<html>
<head>...</head>
<body>
   <h1>{{ book.title }}</h1>
   <p>Author: {{ book.author }}</p>
   <p>ISBN: {{ book.isbn }}</p>
</body>
</html>

因此模板将从视图中获取上下文,然后使用book上下文内部,以便填充内部的值{{ }}.

在您的情况下,您试图将上下文返回给用户,但这没有多大意义。您所要做的就是创建一个模板,该模板将采用该上下文{ 'phone': instance, 'line_set': client_lines }并根据它,将呈现一些 HTML,并将其返回给用户。您可以使用 AJAX 提取该 HTML,然后根据需要使用它。

希望这能为您澄清一些概念。

Django 文档非常好,所以我建议您也阅读介绍。它将解释我在这个答案中使用的所有语法和一些快捷方式(渲染到响应 https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render-to-response, etc).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:如何在ajax中返回模型表单集并在模板中使用 的相关文章

  • jQuery AJAX 或 XHR 请求从完成回调触发失败回调

    在我的 jQuery XHR 的完成处理程序 从 get 调用创建 中是否有一种方法可以查找响应中的问题 然后使用自定义错误消息触发注册的后续处理程序 即失败和始终 像这样的东西 get URL done function data sta
  • 属性列表后缺少 jquery 验证 }

    我这里有这个代码 order validate rules name required true lastname required true address required true telephone required true di
  • PHP 变量无法使用 json_encode() 正确返回成功 AJAX/jQuery POST

    我已经尝试了几个小时才能让它发挥作用 我有一个 div 标签和一个hidden input field我想使用 AJAX 进行更新 这div标签如下 div class friends tab list div div
  • 尝试将过滤器添加到 Grizzly+Jersey 应用程序时出现问题

    我有这个服务器初始化类 package magic app main import org glassfish grizzly http server HttpServer import org glassfish jersey grizz
  • 如何在 jQuery 中检查 null 对象

    我正在使用 jQuery 我想检查页面中是否存在某个元素 我写了以下代码 但它不起作用 if btext i null alert btext i text btext i text Branch i 如何检查元素是否存在 检查jQuery
  • Django url模式多个参数(不带pk)

    我是 Django 框架的新手 有一件事困扰着我 我想要一个简单的休息电话 www abc com users 1 cantonments 1 如果我在 url 模式中使用 pk 则一切都可以开箱即用 pk pk1 pk2 但我有一些权限功
  • "$(document).on('pageshow'" 不适用于 jQuery 1.9.1 + JQM 1.3.0-stable

    使用 jQuery 1 8 3
  • Django Book 平台可用吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 The 姜戈书 http www djangobook com en 1 0 有一个简洁的内容发布模板
  • 如何同时执行多个 jquery 效果?

    我正在页面上制作一些错误 验证元素的动画 我希望它们能够弹跳并突出显示 但如果可能的话 同时进行 这是我目前正在做的事情 var els errorMsg els effect bounce times 5 100 els effect h
  • 如何使用 HTML/CSS/jQuery 编写复数分数?

    我希望能够使用 HTML CSS jQuery 编写分数 而不是使用 TeX 渲染器甚至 MathML 目前 有一个很好的解决方法可以编写简单的分数 如果您有one term对于分子和分母来说 但是一旦你开始使用多个术语 它看起来就相当可怕
  • 能否使用 jQuery 的 $(responseXML) 语法可靠地解析 XML?

    我目前正在寻找一种使用 JavaScript 从服务器 XML 响应中提取信息的简单方法 jQuery 似乎是一个很好的候选者 当谈到使用 jQuery 解析 XML 时 我不断遇到类似于以下代码片段的代码示例 function parse
  • jQuery 单击事件更改 php 会话变量

    对此最好的方法是什么 因为 正如我发现的 只有在尝试过之后才完全有意义 p 你不能在 javascript 条件下设置 PHP 变量 杜尔赫 我能想到的唯一解决方案是对一个处理会话变量的小型 PHP 文件进行 AJAX 调用 elm cli
  • 等待多个延迟对象完成并使用解析值

    我正在尝试找出一种方法来等待多个延迟对象并在完成后处理它们 可能就像开始延迟对象的下一组 我被困住了 因为以下结果不是预期的结果 我期待结果为 allDone resovled values are 1 2 3 实际结果是 allDone
  • CSS 布局:2 列固定流体(再次)

    我正在尝试设置一个 2 列布局 其中左侧区域是固定的 主要内容是流动的 我在这里看到了几个答案 它们往往有效 然而 当我在 左侧 区域使用 jsTree 并在主 内容区域使用 jQuery UI 选项卡时 会出现一些奇怪的行为 html d
  • HTTP-DELETE-请求是否允许响应主体?

    我假设响应代码 200 始终允许响应主体 但我找不到任何明确提及删除请求的响应主体 这里明确提到了RFC http www w3 org Protocols rfc2616 rfc2616 sec9 html sec9 7 简短的回答是 Y
  • 加载一张随机 flickr 图像并附加到 div

    我基本上试图加载从特定用户和特定集合中获取的随机 flickr 图像 然后将其显示在 ID 为 flickr wrap 的 div 中 我正在尝试操纵此 JSON 代码来执行我想要的操作 但不知道从哪里开始 这段代码当前加载了很多图像 我只
  • 如何根据当前请求更改 django 设置?

    我从一个 django 实例运行多个站点 并期望该框架最终能够通过一个或多个安装为数百个站点提供服务 我需要根据当前请求修补一些 django 设置 我已经编写了一些中间件来对设置进行猴子修补 但我需要在调用中间件之前修补这些设置 因为其他
  • 如果 jQuery 验证失败,JSLint 有什么用?

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Django:什么时候运行 makemigrations?

    除了向模型添加 删除 修改字段之外 当我向模型添加或修改方法时 Django 还会检测到更改 所以我的问题是我应该跑步吗makemigrations每次我在模型中更改或添加新方法时 当您添加 更改模型方法时 您不需要运行 manage ma
  • 如何更新多个字段,包括django模型实例的相关字段?

    我想知道 更新多个字段 包括 django 中模型实例的相关字段 的标准方法是什么 Class User models Model id models CharField name models CharField dob models C

随机推荐

  • 让 GMSCircle 响应点击?

    我正在使用适用于 iOS 的 Google 地图 API 我希望当您点击 GMSCircle 时 它 会弹出我在其他地方编写的一些小东西 我已将圆圈设置为 可点击 但我找不到需要设置或制作的内容来监听点击 我用什么 CLLocationCo
  • Emacs 中的 C 注释 - Linux 内核风格

    我在用着 setq default comment style multi line and my region comments when doing M are void main int i int b printf format s
  • 如何使用统一缓冲区对象和实例化渲染来绘制多个对象?

    我想通过使用统一缓冲区对象和实例渲染来绘制带有动画的多个对象 我已经用 for 循环实现了这一点 但我想一次性渲染它们 这是我的代码 当单击鼠标时 它使用 for 循环渲染多个对象 我正在使用四个外部库 它们是 webgl utils js
  • Terraform 规划自动化中人类可读的输出

    我已经通过 github jenkins 设置了自动化 以通过 jenkins 发布 repo 的 terraform plan 的输出 作为对 github 中拉取请求的评论 整个编排工作得很好 除了 terraform plan 的输出
  • 如何在Python中用集合大小的百分比标记维恩图?

    我正在使用matplotlib venn venn2函数在一个图中绘制四个不同的维恩图 我对函数子集参数的输入是字符串集 cse set ucb set data science algorithms machine learning ec
  • 如何使用 PowerShell 从 Azure 函数查询 Azure 表

    我有一个名为的 Azure 表csvtable大约有一百万行 我想使用 Azure 函数查询并返回一行 我尝试过的是使用与表的输入集成 但是据我所知 这只给了我一个数据的子集 inputTable要过滤的变量 我也尝试过打开identity
  • 从 IValueConverter 获取对 ViewModel 的引用

    是否有一种干净的和 或可接受的标准方式从 IValueConverter 引用 ViewModel 或者这是否打破了 MVVM 模式 基本上 我想根据 ViewModel 的其他属性转换 UI 中的绑定数据 我想这与如何从 IValueCo
  • 由相同数据类型的不同构造函数共享的 Haskell 记录访问器

    关于 Haskell 记录的基本问题 如果我定义这个数据类型 data Pet Dog name String Cat name String deriving Show 以下作品 main do let d Dog name Spot c
  • SEO 友好的 URL 真的会影响页面的排名吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如今 SEO 友好的 URL 非常流行 但它们实际上对 Google 和其他搜索引擎中的页面排名产生有意义的影响吗 如果是这样 为什么 如
  • 稳定标准库 qsort?

    我假设 stdlib 中的旧 qsort 函数不稳定 因为手册页没有提及任何相关内容 这就是我正在谈论的功能 include
  • 部署的 Django 项目出现“列表索引超出范围”错误。本地项目工程

    我的项目在本地计算机上运行正常 但是当我将其部署到服务器时出现错误 异常值 列表索引超出范围 异常位置 get context data中的 var www bias experiment src survey views py 第151行
  • MessageBox.Show() 字体

    有没有办法可以更改 MessageBox Show 中的字体类型以获得更大的尺寸 粗体 斜体样式 您始终可以创建自己的 MessageBox 创建一个新的 Windows Forms 类 using System using System
  • scanf函数返回什么?

    scanf 在以下情况下返回的值是多少 int g int p scanf d g Originally int p scanf d g 我知道签名scanf函数是 int scanf const char format 是什么int该函数
  • 使用带有百分比的 CSS Clip

    我试图在 2 个单独的 div 中仅显示图像的上半部分和同一图像的下半部分 我尝试过使用 CSS 属性clip 但似乎不支持 作为单位 只有我吗 您有只显示一半图像的解决方案吗 更新 5年以上后 CSS Clip 属性现已弃用 考虑使用cl
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • 如何使用 Laravel 将二进制数据插入数据库?

    我正在尝试使用 Laravel 4 及其 Eloquent ORM 将二进制数据插入到 PostgreSQL 数据库中 我在迁移中有以下内容 Schema create DataBlobs function table table gt i
  • 如何获取驱动器号和名称(卷标)

    我有一个程序可以告诉我所有硬盘 USB 但它只告诉我驱动器号而不是名称 这是我所拥有的 DriveInfo drives DriveInfo GetDrives Console WriteLine Detected Drives for i
  • 计算一个月的工作日数[重复]

    这个问题在这里已经有答案了 可能的重复 获取给定月份的工作日数 https stackoverflow com questions 8396507 get number of weekdays in a given month 如何计算每个
  • 如何在Android中从url获取字节图像

    我是 android 新手 图像存储在服务器中Base64格式 那么我怎样才能得到它server to 我的项目并使用 Json 对象设置为我的 ImageView 请帮我 任何帮助将不胜感激 尝试这个 首先将 Url 转换为 byte b
  • Django:如何在ajax中返回模型表单集并在模板中使用

    我需要在运行时使用ajax动态地将表单添加到我的表单集中 我指的是使用 Ajax 将表单动态添加到 Django 表单集 https stackoverflow com questions 501719 dynamically adding