django

2010-02-10 4 views
18

'de bir dinamik forma argümanlar iletiliyor Formlarda bir Dinamik Form var. Formumun örneğini oluşturduğumda görüşlerimi nasıl değiştirebilirim? gibidjango

şey:

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

budur Ben formu:

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) 

cevap

44

o kadar kelime argüman ekleyin, bu my_arg deniyor söylüyorlar. Ebeveyn sınıfının init yöntemi fazladan anahtar kelime argümanlarını kabul etmediğinden, pop() anahtar kelimesi arg'ine super() numaralı telefonu aramadan önce emin olun. formu oluştururken

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) 

Ve bu gibi:

Sadece bir not için
form = DynamicForm(..., my_arg='value') 
+9

, öğrenmeye zaman '** kwargs' .. Hep böyle hata başlamıştı:' __init __() Bir var beklenmedik anahtar kelime argümanı 'my_arg'. Senin argümanını yapıcınızın ilk satırında '.pop' yapmalı ya da en azından bu benim problemlerimi çözmeme yardımcı oldu. – krizajb

+0

DynamicForm'u devralabilmem için özel parametreleri geçirebileceğim bir Base Form sınıfına sahibim. Bir örnek gösterebilir misin? – heri0n

+7

@krizajB aslında, super() önce kwargs.pop var, aksi takdirde temel sınıf desteklemediği argümanlar alacaksınız. Ama * ilk * çizgi olmak zorunda değil. – thnee