2011-06-30 2 views

Répondre

8

Il n'est pas nécessaire d'appeler save() après create().

du docs pour créer:

Une méthode pratique pour créer un objet et l'enregistrer en une seule étape

son à utiliser à la place de la création d'un objet de façon normale alors économie avec object.save()

2

La méthode save doit être utilisé lorsque vous modifiez un objet que vous avez obtenu par tout autre moyen que create, tels que .objects.get . Sinon, vos modifications sont perdues.

1

Voici un exemple d'extrait qui montre une bonne utilisation de la méthode de sauvegarde. Il s'agit essentiellement de prendre des données à partir d'un formulaire soumis et ensuite ajouter des informations supplémentaires "dans les coulisses".

#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 

Voici le Django Docs avec un peu plus d'informations sur save() et COMMIT = False

En tant que aside- je viens de réaliser que si vous ajoutez une chaîne statique à un modèle comme mon exemple montre, vous Je le fais mal. Mais l'idée est là haha.

Questions connexes