2017-08-31 162 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)