2017-08-30 13 views
0

私は自分のプロジェクトのテストを書いていますが、「ManyToMany」関係の存在を検証しようとすると問題に遭遇しました。私は、フォームは、多くの関係に新しい多くを作成していることを確認したかった私のテストではDjango:テストで「多対多」関係が存在する

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


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

テストでは、多対多

モデルと一緒にリンクされている以下の2つのモデル、に関するものです。最後の行でいくつかのサンプルコードに基づいてアサーションを作成しましたが、動作していないようです。

テスト:

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

モデル構造が間違っています。あなたはmany-to-manyをに定義してください。の関係があります。反対側は逆の関係でアクセスされます。

また、アサーションが間違っています。リンクされた属性は、Projectクラス全体ではなく、プロジェクトインスタンスを通じて照会する必要があります。

最後に、そのアサーションの前に実際にフォームを検証して保存するコードがありますか?さもなければ何も変わらないでしょう。だから、

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