【问题标题】:Django Test what form a formset usesDjango 测试表单集使用什么形式
【发布时间】:2019-06-20 01:32:30
【问题描述】:

如果我有这样的表格:

class MyForm(modelForm):
    # Form stuff

还有一个像这样的表单集:

MyFormSet = modelformset_factory(
    MyModel,
    form=MyForm,
    max_num=6,
    validate_max=True,
)

有没有办法测试form=MyForm?

def test_formset(self):

    formset = MyFormSet()

    self.assertEqual(formset.max_num, 6)
    self.assertTrue(formset.validate_max)
    # Tried this but it didn't work
    self.assertIsInstance(formset.form, MyForm)

【问题讨论】:

    标签: django unit-testing django-forms django-unittest


    【解决方案1】:

    在这种情况下,formset.form 将是 MyForm 类的子类,而不是它的实例,因此 assertIsInstance 将不起作用。您可以简单地使用:

    def test_formset(self):
    
        formset = MyFormSet()
        self.assertTrue(issubclass(formset.form, MyForm))
    

    对于formset_factory 并且当您不想允许提供MyForm 的任何子类时,这也将起作用(因为formset_factory 不会修改您的表单类):

    def test_formset(self):
    
        formset = MyFormSet()
        self.assertEquals(formset.form, MyForm)
    

    【讨论】:

    • 第一个实际上不起作用,但第二个起作用。
    • 是的,modelformset_factory django 正在从提供的表单创建子类。我已经调整了答案。
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 2016-03-22
    • 2012-03-20
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多