2015-10-18 65 views
1

我想重寫初始化方法在這個表單我有。它看起來像這樣:Django窗體初始化關鍵錯誤與Kwargs

def __init__(self, *args, **kwargs): 
    fr = None 
    if kwargs.get('friend', False): 
     fr = Friend.objects.get(pk=kwargs.get('friend')) 
    super(CreateFriendForm, self).__init__(*args, **kwargs) 

    self.fields["{}_house".format(fr.name)] = forms.ModelChoiceField(queryset=Houses.objects.all(), required=False) 

所以,我想抓住朋友kwargs並使用它,因爲你看到上面。根據傳遞的朋友,我將添加一個字段。在我的測試中,我通過了以下數據:

data = { 
     "user": self.user.pk, 
     "friend": self.friend.pk, 
     "language": 'en' 
    } 
    friend = self.form(data) 
    # Validity 
    self.assertTrue(friend.is_valid()) 
    friend.save() 

不過,我得到一個錯誤,指出存在的一個關鍵錯誤:

if kwargs.get('friend', False): 

我傳遞必要的數據(朋友,用戶等等),但它似乎並不在kwargs中。這裏有什麼問題?謝謝。

+0

'fr'和'friend'有什麼區別?您使用'friend.name',但將fr設置爲朋友對象。 – ozgur

+0

@ozgur沒有。是我的錯,我的壞。 – user3084860

+0

你得到了什麼確切的錯誤? – ozgur

回答

0

問題在於我將數據作爲參數傳遞給表單,而不是作爲kwarg。更改:

friend = self.form(data) 

到:

friend = self.form(data=data) 

修正了我是有存在的主要問題。