2010-03-29 21 views
5

Jak przekazać argument do mojej niestandardowej metody składowania, zachowując prawidłową *args, **kwargs, aby przejść do tej super metody? Próbowałem coś takiego:przekazywanie argumentu do niestandardowej metody zapisywania()

form.save(my_value) 

i

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

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

    print my_value 

Ale to nie wydają się działać. Co ja robię źle?

Edit: Znalazłem ten przykład (patrz ostatnia wiadomość dla przechodzącej „Zmień kolejność”): http://groups.google.com/group/django-users/browse_thread/thread/b285698ea3cabfc9/6ce8a4517875cb40?lnk=raot

Jest to w zasadzie to, co próbuję zrobić, ale my_value mówi się, że nieoczekiwany argumentem dla niektórych powód.

+0

Rozwijanie argumentów w wywołaniu, aby zapisać! –

+1

@Beau co oznacza ..? – Nikita

Odpowiedz

14

Argumenty dotyczące słów kluczowych muszą być zgodne z argumentami pozycyjnymi. Spróbuj to zamiast:

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

czyli

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

Nie wydaje się, aby zrobić lewy - python mówi, że jest błąd składni – Nikita

+0

trzeba było użyć drugiego ... zobacz moją edycję –

+3

+1 dla 'kwargs.pop'. –

2

Można spróbować wykonać następujące czynności.

Zastąpić metodę zapisać jako:

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

Na wywołanie metody zapisać jako:

MyModel.save(my_val="fooooo") 

będzie drukować my_val i zapisać sa to go.

Powiązane problemy