Abh*_*mar 1 django django-views
我无法理解我们使用form.save(commit=False)而不是简单地使用form.savein 的原因Django-views。有人可以向我解释两者的区别和必要性吗?
form.save(commit=False)如果您正在使用 ModelForm,则主要使用。主要用例是如果您的 ModelForm 不包含模型的所有必需字段。
您需要将此表单保存在数据库中,但由于您没有提供所有必填字段,您将收到错误消息。
因此,解决方案是使用 commit=False 保存表单,然后您可以手动定义所需的值,然后调用常规保存。
主要区别是 commit=False 不会推送数据库中的更改,但它会创建它所需的所有结构,但您必须稍后触发常规保存,否则您的表单将不会保存在数据库中。
举个例子:
#create a Dog class with all fields as mandatory
class Dog(models.Model):
name = models.CharField(max_length=50)
race = models.CharField(max_length=50)
age = models.PositiveIntegerField()
#create a modelForm with only name and age
class DogForm(forms.ModelForm):
class Meta:
model = Dog
fields = ['name', 'age']
#in your view use this form
def dog_view(request):
...
form = DogForm(request.POST or None)
#if the form is valid we need to add a race otherwise we will get an error
if form.is_valid():
dog = form.save(commit=False)
#define the race here
dog.race = 'Labrador retriever'
#and then do the regular save to push the change in the database
dog.save()
...
Run Code Online (Sandbox Code Playgroud)
另一个例子是你想手动处理多对多关系的情况。
示例列表很长但很短,这是您需要在将模型保存到数据库之前执行中间步骤的时候。
| 归档时间: |
|
| 查看次数: |
1913 次 |
| 最近记录: |