2011-06-30 11 views
6

caso de que el método save ser llamado después de cada método create o tiene una llamada al método create automáticamente llame al método save?¿Cuándo debe llamarse el método de guardado en Django?

Si el método save es llamado automáticamente después de crear un objeto a continuación, lo que sería un buen uso de los casos para el método save?

Gracias.

Respuesta

8

Sin save() no necesita ser llamado después de create().

del docs para crear:

Un método de conveniencia para la creación de un objeto y guardarlo en un solo paso

su a ser utilizada en lugar de crear un objeto de forma normal luego guardar con object.save()

2

El método save se debe usar cuando se modifica un objeto que se obtuvo por cualquier otro medio que no sea create, como .objects.get . De lo contrario, sus modificaciones se pierden.

1

He aquí un fragmento de ejemplo que muestra un buen uso para el método de guardar. Esto es básicamente tomar datos de un formulario enviado y luego agregar información adicional "detrás de escena".

#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 

Aquí está la Django Docs con algo más de información sobre save() y comprometerse = False

Como aside- me he dado cuenta de que si va a agregar una cadena estática a un modelo como mi ejemplo muestra, se lo estás haciendo mal Pero la idea está ahí jaja.

Cuestiones relacionadas