Когда следует вызывать метод сохранения в Django? - PullRequest
6 голосов
/ 30 июня 2011

Должен ли метод save вызываться после каждого create метода или вызов метода create автоматически вызывает метод save?

Если метод save вызывается автоматически после создания объектатогда что будет хорошим вариантом использования метода save?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 30 июня 2011

Нет save() не нужно вызывать после create().

из документов для создания:

Удобный метод для создания объекта и сохранения его всего за один шаг

его следует использовать вместо создания объекта обычным способом, а затем сохранения с помощью object.save ()

3 голосов
/ 30 июня 2011

Метод save следует использовать при изменении объекта, полученного любым другим способом, кроме create, например .objects.get.В противном случае ваши модификации будут потеряны.

1 голос
/ 30 июня 2011

Вот пример фрагмента, который показывает хорошее использование метода сохранения.Это в основном берет данные из отправленной формы и затем добавляет дополнительную информацию "за кулисами".

#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 =Ложь

Как отступление - я только что понял, что если вы добавляете статическую строку в модель, как показано в моем примере, вы делаете это неправильно.Но идея есть, ха-ха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...