2010-03-29 12 views
5

¿Cómo paso un argumento a mi método de guardado personalizado, preservando el *args, **kwargs adecuado para pasar al método te super? Estaba tratando algo como:pasando un argumento a un método personalizado save()

form.save(my_value) 

y

def save(self, my_value=None, *args, **kwargs): 

    super(MyModel, self).save(*args, **kwargs) 

    print my_value 

pero esto no parece funcionar. ¿Qué estoy haciendo mal?

Editar: me encontré con este ejemplo (véase el último mensaje, para pasar 'reordenación'): http://groups.google.com/group/django-users/browse_thread/thread/b285698ea3cabfc9/6ce8a4517875cb40?lnk=raot

Esto es esencialmente lo que estoy tratando de hacer, pero my_value se dice que es un argumento inesperado para algunos razón.

+0

¡Estás desenrollando los argumentos en la llamada para guardar! –

+1

@Beau que significa ...? – Nikita

Respuesta

14

Los argumentos de la palabra clave deben seguir los argumentos posicionales. Tal vez puedas probar:

def save(self, my_value, *args, **kwargs): 
    .... 

o:

def save(self, *args, **kwargs): 
    my_value = kwargs.pop('my_value', None) 
+0

No parece hacer el truco - python dice que es un error de sintaxis – Nikita

+0

debe haber utilizado el segundo ... ver mi edición –

+3

+1 para 'kwargs.pop'. –

2

Puede intentar lo siguiente.

anular el método de guardar como:

def save(self, my_val, *args, **kwargs): 
    print my_val 
    # do_something here 
    return super(MyModel, self).save(*args, **kwargs) 

En una llamada al método guardar como:

MyModel.save(my_val="fooooo") 

Esto imprimirá my_val y guardar SA ella.

Cuestiones relacionadas