2010-03-29 8 views
5

Wie übergebe ich ein Argument an meine benutzerdefinierte Save-Methode unter Beibehaltung der richtigen *args, **kwargs für die Weitergabe an die Super-Methode? Ich habe versucht, so etwas wie:Übergeben eines Arguments an eine benutzerdefinierte save() -Methode

form.save(my_value) 

und

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

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

    print my_value 

Aber das scheint nicht zu funktionieren. Was mache ich falsch?

Edit: Ich fand dieses Beispiel (siehe die letzte Nachricht, für Passing Neuordnungs '): http://groups.google.com/group/django-users/browse_thread/thread/b285698ea3cabfc9/6ce8a4517875cb40?lnk=raot

Dies ist im Wesentlichen, was ich zu tun versucht, aber my_value gesagt wird, für einige ein unerwartetes Argument sein Grund.

+0

Sie entrollen die Argumente im Aufruf zum Speichern! –

+1

@Beau was bedeutet ..? – Nikita

Antwort

14

Schlüsselwortargumente müssen den Positionsargumenten folgen. Versuchen Sie stattdessen:

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

oder:

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

Scheint nicht den Trick zu tun - Python sagt, es ist ein Syntaxfehler – Nikita

+0

Sie müssen die zweite verwendet haben ... siehe meine Bearbeitung –

+3

+1 für 'kwargs.pop'. –

2

Sie können folgende versuchen.

das Speichern außer Kraft setzen Methode wie:

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

Auf die Methode speichern Aufruf wie:

MyModel.save(my_val="fooooo") 

dies my_val drucken und es sa speichern.

Verwandte Themen