模拟表单集 save_formset 方法 django 表单?

问题描述

我是编写测试的新手,想知道如何模拟 ModelAdmin save_formset 功能的正确方法。基本上,我不想创建表单集,而是想模拟 formset.forms 的值并将其传递给函数,以便它只测试 save_formset 函数的重要部分。但是,在函数结束时,它仍然尝试调用 ModelAdmin formset.save() 方法,这就是我获得 nonetype 属性的地方,因为实际上我没有将实际的表单集传递给函数。这是我到目前为止尝试过的 admin.py

 def save_formset(self,request,form,formset,change):
        forms = self.get_formset_forms(formset)
        for f in forms:
            obj = f.instance
            if not hasattr(obj,"creator"):
                obj.creator = request.user
        formset.save()


    def get_formset_forms(self,formset):
        return formset.forms

tests.py

  @patch("core.apps.survey.admin.SurveyAdmin.get_formset_forms")
        def test_save_formset(self,mock_get_formset_forms,mock_formset_save):
            user = mixer.blend(User)
            mock_get_formset_forms.return_value = [{'instance':{'iss':user}}]
            mock_formset_save.return_value=1
            site = AdminSite()
            survey_admin = admin.SurveyResponseAdmin(Survey,site)
            survey_admin.save_formset(request=None,form=None,formset=None,change=None)

错误日志

 survey_admin.save_formset(request=None,change=None)

core/apps/survey/tests/test_admin.py:56: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <core.apps.survey.admin.SurveyResponseAdmin object at 0x7f4ed5feadc0>,request = None,form = None,formset = None,change = None

    def save_formset(self,change):
        """
        Given an inline formset save it to the database.
        """
>       formset.save()
E       AttributeError: 'nonetype' object has no attribute 'save'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)