2017-08-30 59 views
0

我正在爲我的項目編寫測試,但是在嘗試驗證'ManyToMany'關係的存在時遇到問題。Django:assert'多對多'關係存在於測試中

測試涉及以下兩個型號,這是一個多對多

模式聯繫在一起:

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

您的模型結構是錯誤的。你只應該定義多對多的關係一個一方;另一方是通過反向關係訪問的。

此外,你的斷言是錯誤的。您需要通過項目實例查詢鏈接的屬性,而不是整個Project類。

最後,你確實有一些代碼之前,斷言來驗證和保存表單?否則什麼都不會改變。

所以:

self.assertTrue(form.is_valid()) 
saved_project = form.save() 
self.assertTrue(saved_project.attributes_set.exists())