相关疑难解决方法(0)

测试InlineFormset清理方法

我有一个Django项目,有2个模型,a StructureBracket,Bracket有一个ForeignKey到一个结构(即一对多,一个结构有许多括号).我TabularInline为管理站点创建了一个,这样就可以在Structure上找到一个Brackets表.我添加了一个自定义formset和一些自定义clean方法来进行一些额外的验证,你不能让一个Bracket与同一个结构上的另一个Bracket冲突.

管理员看起来像这样:

class BracketInline(admin.TabularInline):
    model = Bracket
    formset = BracketInlineFormset

class StructureAdmin(admin.ModelAdmin):
    inlines = [
        BracketInline
    ]
admin.site.register(Structure, StructureAdmin)
Run Code Online (Sandbox Code Playgroud)

BracketInlineFormset刚刚有干净的方法:

class BracketInlineFormset(forms.models.BaseInlineFormSet):
    def clean(self):
        … my clean code here …
Run Code Online (Sandbox Code Playgroud)

一切正常,验证工作.

但是现在我想写一些unittest来测试我复杂的formset验证逻辑.

我首次尝试验证已知良好的值是:

data = {'form-TOTAL_FORMS': '1', 'form-INITIAL_FORMS': '0', 'form-MAX_NUM_FORMS': '', 'form-0-field1':'good-value', … }
formset = BracketInlineFormset(data)
self.assertTrue(formset.is_valid())
Run Code Online (Sandbox Code Playgroud)

但是这不起作用并引发异常:

======================================================================
ERROR: testValid (appname.tests.StructureTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/paht/to/project/tests.py", line 494, in testValid
    formset = BracketInlineFormset(data)
  File "/path/to/django/forms/models.py", …
Run Code Online (Sandbox Code Playgroud)

python django django-forms inline-formset

7
推荐指数
1
解决办法
1245
查看次数

标签 统计

django ×1

django-forms ×1

inline-formset ×1

python ×1