【问题标题】:django - how to save form (not a modelForm)django - 如何保存表单(不是模型表单)
【发布时间】:2011-01-08 12:50:19
【问题描述】:

可能是一个愚蠢的问题,但我不确定如何处理这个“正确”。

我得到了一个包含一些字段的普通表单。 我可以毫无问题地插入数据。 当我想编辑一条记录时,我使用“model_to_dict”函数来填充表单。 编辑完一条记录后,我想保存它,我的问题就从这里开始了。

django 文档说模型会根据 pk 值自动创建或更新记录。如果 pk 值存在,则为更新,否则为插入。 所以我创建了这个保存功能:

def save(self, primary_key=0):
    mymodel = Somemodel(pk=primary_key,
        samplefield=self.cleaned_data['samplefield'],
    )
    mymodel .save()
    print 'PK:'+str(d.pk)
    # Handle the MultipleChoiceField's
    for x in self.cleaned_data['paymentMethod']:
        x.mymodel_set.add(d)

所以,当我编辑记录时,这可以正常工作。 但是当我插入一条新记录时,它可以正常插入,但是 mymodel.id = 0 这意味着我无法保存 MultipleChoiceFields 的关系。

所以我想知道这是否是处理此问题的好方法? 为什么保存模型后mymodel.id = 0?

【问题讨论】:

    标签: django forms save


    【解决方案1】:

    0 是一个有效的整数 PK。请改用None

    【讨论】:

      【解决方案2】:

      首先,您为什么不使用 ModelForm?这是处理这种情况的正确方法。

      在回答您的问题“为什么 pk 为 0”时,这是因为如果未将 PK 传递到函数中,您已明确将其设置为 0。如果您不想将其设置为 0,请使用 None 作为默认值。

      【讨论】:

      • 嗨,Daniel,我使用的是普通表单,因为我无法处理 modelForms 上多对多关系的额外字段。
      猜你喜欢
      • 2020-12-03
      • 2021-01-27
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2021-02-15
      相关资源
      最近更新 更多