首页 > 解决方案 > 如何创建 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”的方式来完成这个?

示例草图: 草图

标签: pythondjangopython-3.xformsdjango-forms

解决方案


推荐阅读