2017-08-30 4 views
0

J'écris des tests pour mon projet, mais j'ai rencontré un problème en essayant de vérifier l'existence d'une relation 'ManyToMany'.Django: assert relation 'Many-to-many' existe dans le test

Le test porte sur les deux modèles, qui sont reliés entre eux avec un ManyToMany

modèles suivants:

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


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

Dans mon test, je voulais vérifier que le formulaire a créé une nouvelle relation plusieurs à plusieurs. J'ai créé l'assertion sur la dernière ligne, basée sur un exemple de code, mais cela ne semble pas fonctionner.

Test:

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()) 

Est-ce que quelqu'un sait ce que je fais mal?

Répondre

1

La structure de votre modèle est incorrecte. Vous ne devez définir que le nombre plusieurs à plusieurs sur un côté de la relation; l'autre côté est accessible via la relation inverse.

De plus, votre affirmation est fausse. Vous devez interroger les attributs liés via l'instance de projet, et non la classe Project dans son ensemble.

Enfin, avez-vous réellement du code avant cette assertion pour valider et enregistrer le formulaire? Sinon, rien n'aura changé.

Alors:

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