如何创建一个ModelFormset来编辑未保存模型的某些字段?

时间:2019-05-14 17:46:18

标签: python django python-3.x forms django-forms

在我的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数据中。那是一个痛苦的屁股,但是好吧...

但是,请稍候:如果我要遍历模板中的表单集行,如何模拟地遍历数据行以在同一行中显示它们呢?我不能在上下文中将它们压缩在一起,因为一个是表单集,我需要管理表单。

地狱,这很丑。

完成此任务的“正确”,最“偏执”方法是什么?

示例草图: sketch

0 个答案:

没有答案