什么时候应该在Django中调用save方法?

时间:2011-06-30 11:31:03

标签: python django

是否应该在每个create方法之后调用save方法,或者调用create方法是否会自动调用save方法?

如果在创建对象后自动调用save方法,那么save方法的用例是什么?

感谢。

3 个答案:

答案 0 :(得分:8)

save()之后不需要调用create()

来自docs for create:

  

创建对象并一步保存所有对象的便捷方法

用于代替以正常方式创建对象,然后使用object.save()

进行保存

答案 1 :(得分:3)

当您修改通过save之外的任何其他方式获得的对象时,应使用create方法,例如.objects.get。否则,您的修改将丢失。

答案 2 :(得分:1)

这是一个示例代码段,可以很好地用于save方法。这基本上是从提交的表单中获取数据,然后在“幕后”添加其他信息。

#Model
class Foo(models.Model):
    field_one = models.CharField(max_length=10)
    field_two = models.CharField(max_length=10)
    field_three = models.CharField(max_length=10)

#Form
class FooForm(ModelForm):
    class Meta:
        model = Foo
        exclude = ('field_three')  #form will just show field_one and field_two

#View
def FooView(request):
    if request.method == 'POST'
        form = FooForm(request.POST)  #gets field_one and two from form data
        if form.is_valid():
            new_foo = form.save(commit = False) #doesn't actually save yet
            new_foo.field_three = 'Foobar!' #add data to field_three
            new_foo.save() #now it saves all 3 fields
    else:
        form = FooForm()
    return #add some sort of http response here

这是Django Docs,其中包含有关save()和commit = False

的更多信息

顺便说一句 - 我刚才意识到,如果你要像我的示例节目那样向模型添加静态字符串,那么你做错了。但想法是哈哈。