我正在尝试单元测试我的一个Django表单,我在基于Django的应用程序的管理员中使用它。 该表单的Meta类具有模型字段。不确定哪种方法更好:
我更喜欢第二种方法(我认为这种方法是我在浏览器中填写表单时使用的方法,对吧?),但我不知道如何表示ManyToMany字段
这里有一些(简化的)代码:
首先是模型
class Segment(models.Model):
name = models.CharField(max_length=150)
app_name = models.CharField(max_length=150)
class ProceduralDocument(models.Model):
name = models.CharField(max_length=150)
content = models.TextField(null=True, blank=True, default=None)
deleted = models.BooleanField(default=False)
date_added = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
segments = models.ManyToManyField(Segment)
如您所见,ProceduralDocument中只有2个必填字段:
现在,管理员
class ProceduralDocumentAdminForm(forms.ModelForm):
class Meta:
model = ProceduralDocument
widgets = {'content': RedactorEditor(redactor_options={
'lang': 'es',
'redactor_css': "styles/pydocx_styles.css"
}), }
exclude = ['deleted']
def clean_name(self):
"""
Just a validation function. Not important
"""
self.cleaned_data['name'] = remove_accents(self.cleaned_data['name'])
return self.cleaned_data['name']
class ProceduralDocumentAdmin(admin.ModelAdmin):
form = ProceduralDocumentAdminForm
search_fields = ['name']
list_filter = ['name']
list_per_page = 300
def save_model(self, request, obj, form, change):
# Do some stuff here, not important
pass
如果我想测试ProceduralDocumentAdminForm,我可以这样做(查看'段'部分)
form = ProceduralDocumentAdminForm(
data={
'name': u'áÉíÓúñÑ',
'segments': "..."}) # What to put here??
form.save()
# Here the assertions...
我的问题是:我应该将什么用作'细分的价值?在数据?它与许多领域相匹配。
另一个问题:我选择了正确的方法吗?在不创建模型对象的情况下测试AdminForm,只传递JSON数据