Django:如何将模型表单数据从一个页面传输到另一个页面,然后返回,而不提交到数据库?

2023-12-27

[前言:虽然我意识到可能有更简单的方法来做到这一点(即,只需使用 Django 内置 Admin,或使用内联在一页上进行所有编辑等),但不幸的是,我无法控制设计,所以我正在寻求有关如何处理我负责实施的工作的帮助。]

我有 2 个模型,甲板和滑动。 Slide 有 Deck 的外键。 (还有一个中间模型——它是一种 m2m 关系——但为了简化已经复杂的讨论,我将假装它是一种更简单的多对一关系。)

我正在实现的界面显示一个页面,其中包含用于输入或编辑 Deck 字段的表单,其中还包括 Deck 中嵌入的幻灯片列表,其中包含一些字段(我正在进行文本输入),还带有一个“每张幻灯片的“编辑”和“删除”锚链接。 (参见图片)如果您单击“编辑”链接,您将进入一个新页面,其中包含详细表格,用于输入代表相应幻灯片内容的所有信息。如果您单击该表单中的“提交”,您将返回到该套牌的页面。

正如标题问题所提出的,我显然不想将任何 Deck 或幻灯片提交到数据库,直到用户单击整个 Deck 的“提交”,即他们可以在此期间添加或编辑许多幻灯片,并可能决定取消整个过程。

最好、最干净的方法是什么?

我查看了 Django 的 FormWizard 类(http://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/ http://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/),但似乎适合多步线性流,而不是我的情况。

我已经必须在演示中实现此功能,并且通过为幻灯片创建内联表单集和为甲板创建表单,然后为隐藏表单和表单集的表单编写子类,我已经完成了大部分工作我在两页之间来回穿梭。下面是一些代码,演示了如何在幻灯片页面中使用隐藏表单:

class DeckForm(ModelForm):
    class Meta:
        #stuff here

class HiddenDeckForm(DeckForm):
    def __init__(self, *args, **kwargs):
        super(DeckHiddenForm, self).__init__(*args, **kwargs)
        for name, field in self.fields.iteritems():
            field.widget = field.hidden_widget()
            field.required = False

所以在我看来,每次我进入幻灯片表单页面时,我都会从 POST 数据生成一个 HiddenDeckForm 并将其传入,然后在我看来返回到幻灯片页面时,我会从以下位置重新生成 DeckForm (不是隐藏子类) POST 数据。不会发布我所有的幻灯片表单代码,因为我基本上是在问是否有更好的方法来做到这一点,但类似地,我有一个 HiddenSlideForm 类,并在我的模板之间传递这些表单集以保存状态。

然后当用户在 Deck 页面点击提交时,Deck 表单和 Slides 表单集都会保存到 DB 中。

它确实有效,但是这是一个好方法吗?这是一段很好的代码,我真的不得不深入研究一些 Django 内部结构——感觉就像我正在以一种并非设计用途的方式使用东西。或者是否已经有更标准的方法来处理这种情况?

如果有帮助,我会发布更多代码。

谢谢您的帮助!

PS 如您所见,我在 jquery colorbox 中实现它,并使用 ajax 进行表单之间的转换,但我只是在视图中使用正常的模板/表单渲染,并使用 ajax 将渲染的 html 传递回页面称呼 。 。 。我想我可以用 json 做一些事情,但强烈喜欢坚持传递渲染模板,因为如果需要的话,这样的实现可以在没有 ajax 或 javascript 的情况下使用。


想法 A:将未提交的数据存储在会话中,直到一切准备好提交。到客户端的每个表单/往返仅添加/更新累积的数据。如果他们放弃它,你只会留下垃圾,直到会话被破坏。您可以将几乎所有内容保存到会话中。

想法 B:向数据库表添加一个布尔值,指示何时提交一行(例如:“is_active”或“is_pending”)。意味着你永远不会失去任何东西,除了管理起来有点麻烦。

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

Django:如何将模型表单数据从一个页面传输到另一个页面,然后返回,而不提交到数据库? 的相关文章

  • 如何测试该变量不等于多个事物?

    这是我的一段代码 choice while choice 1 and choice 2 and choice 3 choice raw input pick 1 2 or 3 if choice 1 print 1 it is elif c
  • 使用 keras 澄清 Yolo v3 模型输出

    我将 yolo v3 模型与 keras 一起使用 该网络为我提供了形状如下的输出容器 1 13 13 255 1 26 26 255 1 52 52 255 所以我找到了这个link https www cyberailab com ho
  • Python:由于 OSError 无法安装软件包:[Errno 2] 没有这样的文件或目录

    我尝试使用pip安装sklearn 并且我收到以下错误消息 错误 由于 OSError 无法安装软件包 Errno 2 没有这样的文件或目录 C Users 13434 AppData Local Packages PythonSoftwa
  • MacOS Big Sur 中的 NPM 错误“找不到 Python 可执行文件”

    我已经花了整整一周的时间寻找这个问题的答案 但没有成功 我查看了每个 StackOverflow 帖子 Google 的每一篇文章以及我能找到的每个相关的 Github 问题 大多数相关错误似乎都比较旧 所以我想知道我的问题是否由于我使用的
  • python win32com.client 调整窗口大小

    我正在使用 Python 3 4 1 通过 win32com client 控制 Windows 应用程序 我可以激活它 我可以发送击键 点击等 现在我想知道是否有办法调整窗口大小并将其设置到特定位置 我找不到方法 这里有一些代码片段 所以
  • Python MySQLdb:connection.close() VS。光标.close()

    如果我使用MySQLdb通过Python连接到MySQL Server 我创建一个connection and a cursor像这样 connection MySQLdb connect cursor connection cursor
  • Python 模块 BeautifulSoup 提取锚点 href

    我正在使用 BeautifulSoup 模块通过以下方式从 html 选择所有 href def extract links html soup BeautifulSoup html anchors soup findAll a print
  • python os.fork 使用相同的 python 解释器吗?

    据我所知 Python 中的线程使用相同的 Python 解释器实例 我的问题是与创建的流程相同os fork 或者每个进程创建的os fork有自己的翻译吗 每当你 fork 时 整个 Python 进程都会在内存中复制 包括Python
  • 如何在 tkinter 后台运行函数[重复]

    这个问题在这里已经有答案了 我是 GUI 编程新手 我想用 tkinter 编写一个 Python 程序 我想要它做的就是在后台运行一个可以通过 GUI 影响的简单函数 该函数从 0 计数到无穷大 直到按下按钮为止 至少这是我想要它做的 但
  • 在添加数据之前使用 Python gdata 清除工作表中的行

    我有一个 Google 电子表格 我使用 python 脚本和 gdata 库填充值 如果我多次运行脚本 它会将新行附加到工作表中 我希望脚本在填充之前首先清除行中的所有数据 这样每次运行时我都会有一组新的数据脚本 我尝试过使用 Updat
  • 使用张量流导出神经网络的权重

    我使用张量流工具编写了神经网络 一切正常 现在我想导出神经网络的最终权重以制定单一的预测方法 我怎样才能做到这一点 您需要在训练结束时使用以下命令保存模型tf train Saver https www tensorflow org ver
  • numpy 向量化而不是 for 循环

    我用 Python 写了一些代码 运行良好 但速度很慢 我认为是由于 for 循环 我希望可以使用 numpy 命令加速以下操作 让我定义目标 假设我有一个 2D numpy 数组all CMs尺寸row x col 例如考虑一个6x11数
  • 哈希 freezeset 与排序元组

    在 Python 中 给定一组可比较的 可散列的元素s 散列是否更好frozenset s or tuple sorted s 这取决于你在做什么 创建一个更快frozenset 比排序tuple but frozenset占用的内存比tu
  • 如何使用 QAbstractTableModel(模型/视图)将数据设置到 QComboBox?

    我希望能够设置itemData of a combobox当使用填充时QAbstractTableModel 但是 我只能从模型返回一个字符串data method 通常 当不使用模型时 可以像这样执行 Set text and data
  • 为什么我的 Python 散点图不起作用?

    我使用 pylab 创建了一个非常简单的散点图 pylab scatter engineSize fuelMile pylab show 该程序的其余部分不值得发布 因为正是该行给我带来了问题 当我将 散点 更改为 绘图 时 它会绘制数据图
  • 阻止 BeautifulSoup 将我的 XML 标签转换为小写

    我正在使用 BeautifulStoneSoup 来解析 XML 文档并更改一些属性 我注意到它会自动将所有 XML 标签转换为小写 例如我的源文件有
  • 无法将 librosa 与 python 3 一起使用

    我已经在 Windows 上的 ubuntu 子系统上使用 pip3 正确安装了 librosa 但是当我尝试执行像这样的简单程序时 import librosa data sr librosa load sound mp3 print d
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • nltk 标记化和缩写

    我用 nltk 对文本进行标记 只是将句子输入到 wordpunct tokenizer 中 这会拆分缩写 例如 don t 到 don t 但我想将它们保留为一个单词 我正在改进我的方法 以实现更精确的文本标记化 因此我需要更深入地研究
  • 处理错误“TypeError: Expected tuple, got str”将 CSV 加载到 pandas 多级和多索引 (pandas)

    我正在尝试加载 CSV 文件 这个文件 https drive google com file d 13a eVeSzy6HkhffQw32S57U hm5YCj0 view usp sharing 创建一个多索引多级数据帧 它有5 五 指

随机推荐