2010-02-10 26 views
18

Mam formularz dynamiczny w formularzach. Jak mogę przekazać argument z mojego widoku podczas tworzenia mojego formularza?przekazywanie argumentów do formularza dynamicznego w django

Coś jak:

form = DynamicForm("some string argument I'm passing to my form") 

Jest to forma mam:

class DynamicForm(Form): 
def __init__(self, *args, **kwargs): 
    super(DynamicForm, self).__init__(*args, **kwargs) 
    for item in range(5): 
     self.fields['test_field_%d' % item] = CharField(max_length=255) 

Odpowiedz

44

dodać go jako argumentu słowa kluczowego, mówią, że to się nazywa my_arg. Upewnij się, że słowo kluczowe arg ma przed sobą pop(), ponieważ wywołuje super(), ponieważ metoda init klasy macierzystej nie przyjmuje dodatkowych argumentów słów kluczowych.

class DynamicForm(Form): 
    def __init__(self, *args, **kwargs): 
    my_arg = kwargs.pop('my_arg') 
    super(DynamicForm, self).__init__(*args, **kwargs) 
    for item in range(5): 
     self.fields['test_field_%d' % item] = CharField(max_length=255) 

I podczas tworzenia formularza to tak:

form = DynamicForm(..., my_arg='value') 
+9

Tylko na notatki, podczas nauki o '** kwargs' .. I zawsze się błąd jak:' __init __() got nieoczekiwany argument słowa kluczowego "my_arg''. Musisz ".pop" argumentować w pierwszej linii swojego konstruktora lub przynajmniej to mi pomogło rozwiązać moje problemy. – krizajb

+0

Chcę móc dziedziczyć DynamicForm, więc mam podstawową klasę Form, którą mogę przekazywać niestandardowe parametry. Czy możesz pokazać przykład? – heri0n

+7

@krizajB faktycznie, musisz kwargs.pop przed super(), w przeciwnym razie klasa bazowa będzie otrzymywać argumenty, które nie obsługuje. Ale nie musi to być * pierwsza * linia. – thnee

Powiązane problemy