Django:断言测试中存在“多对多”关系

时间:2017-08-30 11:55:20

标签: django django-testing

我正在为我的项目编写测试,但在尝试验证'ManyToMany'关系的存在时遇到了问题。

该测试涉及以下两个模型,它们与ManyToMany

链接在一起

型号:

class Project(models.Model):
    (...)
    linked_attributes = models.ManyToManyField(attributes, blank=True)


class Attributes(models.Model):
    (...)
    class linked_projects = models.ManyToManyField(Project, blank=True)

在我的测试中,我想验证表单创建了一个新的多对多关系。我在最后一行创建了断言,基于一些示例代码,但它似乎没有工作。

测试:

class ProjectTest(TestCase):
    (...)
    form_data = {'linked_attributes' : self.attribute}
    form = ProjectForm(data=form_data, project=self.project, instance=self.project)

   self.assertTrue(Project.attributes_set.filter(pk=self.Project.pk).exists())

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的模型结构错误。您应该只在关系的一个侧定义多对多;通过反向关系访问另一方。

另外,你的断言是错误的。您需要通过项目实例查询链接的属性,而不是整个Project类。

最后,在断言之前,您是否真的有一些代码来验证和保存表单?否则什么都不会改变。

所以:

const objArray = [{'key': 'key1', 'fields': [1, 2]}, {'key': 'key2', 'fields': [3, 4]}],
      result = objArray.reduce((a, c) => [].concat(a, c.fields), []);

console.log(result);