【问题标题】:how to test a Django formset submission如何测试 Django 表单集提交
【发布时间】:2018-02-09 14:41:46
【问题描述】:

我要么错过了一些非常简单的东西(而且我的 Google-Fu 也没有),要么我偏离了轨道。你打电话!

我想编写一个测试来练习将表单集发布到视图。

# 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。我希望 Formset 上有一些方法可以为我提供适当的字典(带有管理表单信息),但我一生都找不到它。

更新:

我这样做了:

    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)

但我仍然想知道是否有内置的 formset 方法可以做到这一点,我只是看不到它....

【问题讨论】:

    标签: django-testing


    【解决方案1】:

    我已经通过在数据中传递以下 dict 值来解决

    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': 'player1@addplayer.com',
            'form-0-password': 'admin',
    
            # Second user data
            'form-1-username': 'addplayer2',
            'form-1-email': 'player2@addplayer.com',
            'form-1-password': 'admin'
        }
    
        self.client.post(reverse("/myview"), data)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2018-10-26
    • 2020-03-29
    相关资源
    最近更新 更多