2017-08-31 167 views
0

我要麼失去一些非常簡單的東西(而我的Google-Fu缺乏),要麼我沒有辦法跟蹤。你打電話!如何測試Django formset提交

我想編寫一個測試,以在視圖中對一個表單進行POST操作。

# get the modelformset from the view 
response = self.client.get("/myview") 
formset = response.context['formset'] 

# change the values in the underlying form 
for form in enumerate(formset): 
    form.instance['something'] = i 

# how do I post the formset back to myview? this does NOT work... 
response = self.client.post("/myview", formset, follow=True) 


AttributeError: 'MyFormSet' object has no attribute 'items' 

的錯誤使得完整意義上的,因爲我需要通過一本字典作爲第二個參數,而不是一個表單集。我希望在Formset上有一些方法可以給我適當的字典(包括管理表單信息),但我無法在我的生活中找到它。

UPDATE:

我把它做這個工作:

data = {} 
    for field in formset.management_form: 
     data["-".join((formset.management_form.prefix, field.name))] = field.value() 
    for form in formset: 
     for field in form: 
      data["-".join((form.prefix, field.name))] = field.value() 

    self.client.post(reverse("/myview"), data, follow=True) 

,但我一直在想,如果有一個內置的表單集的方法來做到這一點,我只是不明白它....

回答

0

我已經在數據傳遞以下字典價值解決

data = { 
     # management_form data 
     'form-INITIAL_FORMS': '0', 
     'form-TOTAL_FORMS': '2', 
     'form-MAX_NUM_FORMS': '', 

     # First user data 
     'form-0-username': 'addplayer1', 
     'form-0-email': '[email protected]', 
     'form-0-password': 'admin', 

     # Second user data 
     'form-1-username': 'addplayer2', 
     'form-1-email': '[email protected]', 
     'form-1-password': 'admin' 
    } 

    self.client.post(reverse("/myview"), data)