Python Django:保存从form.Forms扩展而来的表单时使用save(commit=false)

Python Django:保存从form.Forms扩展而来的表单时使用save(commit=false),python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我有一个多对多字段,为了保存从表单中检索到的数据,首先,我必须保存该表的一个实例,否则,会出现如下错误: 在使用此多对多关系之前,“Order:None”字段“id”需要有一个值 但问题是,当我调用了两个save方法时,它们也会创建两个不同的日志(在第一个save()创建实例,在第一个字母处编辑实例),这会导致混乱。因此,我希望能够在第一个commit=False,并在第二个save()中完成保存。Commit用于ModalForm,但是,我的表单扩展了form.Forms views.py f

我有一个多对多字段,为了保存从表单中检索到的数据,首先,我必须保存该表的一个实例,否则,会出现如下错误:

在使用此多对多关系之前,“Order:None”字段“id”需要有一个值

但问题是,当我调用了两个save方法时,它们也会创建两个不同的日志(在第一个
save()
创建实例,在第一个字母处编辑实例),这会导致混乱。因此,我希望能够在第一个
commit=False
,并在第二个
save()
中完成保存。Commit用于
ModalForm
,但是,我的表单扩展了
form.Forms

views.py forms.py models.py
设置多对多字段后,不必保存对象。因此,您应该能够重新安排代码,以便只调用一次
save()

if form.is_valid():
    order = Order()
    order.user = request.user
    order.location = form.cleaned_data['location']
    order.note = form.cleaned_data['note']
    order.save()

    order.ordered_materials.set(form.cleaned_data['ordered_materials'])

设置多对多字段后,不必保存对象。因此,您应该能够重新安排代码,以便只调用一次
save()

if form.is_valid():
    order = Order()
    order.user = request.user
    order.location = form.cleaned_data['location']
    order.note = form.cleaned_data['note']
    order.save()

    order.ordered_materials.set(form.cleaned_data['ordered_materials'])

您的
OrderAddForm
类继承自
forms.Form
,而不是
forms.ModelForm
。因此,它没有一个
save()
方法(除非您添加了一个方法并将其排除在外)。您的
OrderAddForm
类继承自
forms.Form
,而不是
forms.ModelForm
。因此,它没有一个
save()
方法(除非您添加了一个方法,并且不考虑它)。
class Order(models.Model):

user = models.ForeignKey(User,
                         on_delete=models.CASCADE)

ordered_materials = models.ManyToManyField('Material')
location = models.CharField(max_length=500)
note = models.CharField(max_length=30,
                        verbose_name="Note")

STATUS = (
    ('n', 'None'),
    ('a', 'Accepted'),
    ('r', 'Rejected'),
)

status_name = models.CharField(max_length=1,
                               choices=STATUS,
                               default='n')

def __str__(self):
    return str(self.id)
if form.is_valid():
    order = Order()
    order.user = request.user
    order.location = form.cleaned_data['location']
    order.note = form.cleaned_data['note']
    order.save()

    order.ordered_materials.set(form.cleaned_data['ordered_materials'])