2010-07-09 15 views
7

¿Los métodos save() de modelo son perezosos en django?Django - ¿Los métodos save() de modelo son flojos?

Por ejemplo, ¿en qué línea del ejemplo del código siguiente django golpeará la base de datos?

my_model = MyModel() 
my_model.name = 'Jeff Atwood' 
my_model.save() 
# Some code that is independent of my_model... 
model_id = model_instance.id 
print (model_id) 

Respuesta

7

No tiene mucho sentido tener un ahorro de tiempo, ¿o no? QuerySets de Django son flojos, el método save del modelo no lo es.

Desde la fuente de Django:

django/db/models/base.py, líneas 424-437:

def save(self, force_insert=False, force_update=False, using=None): 
    """ 
    Saves the current instance. Override this in a subclass if you want to 
    control the saving process. 

    The 'force_insert' and 'force_update' parameters can be used to insist 
    that the "save" must be an SQL insert or update (or equivalent for 
    non-SQL backends), respectively. Normally, they should not be set. 
    """ 
    if force_insert and force_update: 
     raise ValueError("Cannot force both insert and updating in \ 
      model saving.") 
    self.save_base(using=using, force_insert=force_insert, 
     force_update=force_update) 

save.alters_data = True 

Entonces, save_base hace el trabajo pesado (mismo archivo, líneas 439-545):

... 
transaction.commit_unless_managed(using=using) 
... 

Y en django/db/transaction.py, líneas 167-178, encontrará:

def commit_unless_managed(using=None): 
    """ 
    Commits changes if the system is not in managed transaction mode. 
    """ 
    ... 

P.S. Todos los números de línea se aplican a la versión de django (1, 3, 0, 'alpha', 0).

+1

En realidad, en algunos casos sería preferible realizar trabajos de guardado perezosos. Lazy Lazy permitirá transacciones mucho más cortas sin ningún esfuerzo por parte del programador. Ver http://stackoverflow.com/questions/3215833/django-keeping-save-based-transactions-short – Jonathan

+0

De acuerdo, buena respuesta, pero sí, a veces tiene mucho sentido tener un ahorro perezosa. – Seth

Cuestiones relacionadas