测试Django ModelForm,它取决于具有manytomanyfield的模型

时间:2016-12-20 17:02:00

标签: python unit-testing django-forms django-1.8 manytomanyfield

我正在尝试单元测试我的一个Django表单,我在基于Django的应用程序的管理员中使用它。 该表单的Meta类具有模型字段。不确定哪种方法更好:

  • 实例化模型,并使用它构建ModelForm。
  • 仅使用数据参数实例化ModelForm,而不使用模型对象

我更喜欢第二种方法(我认为这种方法是我在浏览器中填写表单时使用的方法,对吧?),但我不知道如何表示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个必填字段:

  • 名称(文字字段)
  • 段(manytomany field)

现在,管理员

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数据

0 个答案:

没有答案