python - 如何创建 ModelFormset 来编辑未保存模型的某些字段?
问题描述
在我的 django 应用程序中,我从服务器接收多行数据。收到后,我要求用户为每个数据行命名,并决定将来是否同步该行。之后,我将此信息与行一起保存在数据库中。
这意味着我有模型
class Row(models.Model):
name = models.CharField(max_length = 191)
synced = models.BooleanField(default = True)
col_1 = models.CharField(max_length = 191)
...
col_n = models.CharField(max_length = 191)
和表格
class RowForm(forms.ModelForm):
class Meta:
model = Row
fields = ['name','synced']
在我的模板中,我想将“名称”和“同步”显示为表单字段,将“col_1”、...、“col_n”显示为连续不可编辑的数据。
在我看来:
我从服务器接收数据并从中创建 Row 模型实例。这是狗屎开始变得丑陋的地方。我尝试定义一个 ModelFormset。但是等一下:我没有 QuerySet 来提供给它,因为数据还没有在数据库中,尽管它在模型实例中。
好的。也许我应该使用常规的 Formset。但是等等:我不想将任何初始数据提供给 Formset。表单字段应该是空的/它们的默认值。由于我无法“保留”表单集中的“col_1”、...、“col_n”数据而不使其可编辑,因此我必须将其作为上下文中的单独对象传递。我必须render()
使用模板
context={'row_formset': row_formset, 'row_data': row_data}
我必须在会话中保留“col_1”,...,“col_n”,因为它不会包含在 POST 数据中。这是一个痛苦的屁股,但好吧......
但是等一下:如果我遍历模板中的表单集行,我如何同时遍历数据行以将它们显示在同一行中?我不能在上下文中将它们压缩在一起,因为一个是表单集,我需要管理表单。
见鬼,这太丑了。
什么是“正确的”,最“djangoish”的方式来完成这个?
解决方案
推荐阅读
- python - 用 ausent 值填充动态列表查询集并将其合并
- ios - Windows VS - Xamarin IOS info.plist 保存后设备方向更改
- java - 使用 Spring Boot 的 Oracle 到 SQL Server 数据传输
- python - 有没有办法进入 for 循环,然后从当前位置反转该循环?
- node.js - cookie 没有从 jquery ajax 中保存
- c# - 如何从c#中的字符串中获取第二部分
- java - 使用 ProcessBuilder 时 Java 未启动 GZIP 命令
- wordpress - 如果具有给定参数,则覆盖图库短代码(WordPress)
- django - 未找到“注册”的反向。“注册”不是有效的视图函数或模式名称
- python - Python无法分配对象变量