Search code examples
djangoseleniumdjango-testingdjango-tests

Create A Many-To-Many Relationship In A Test


I have a many-to-many relationship:

class Person(models.Model):
    modules = models.ManyToManyField(BaseModule, blank=True)

class BaseModule(models.Model):
    task_type = models.CharField(max_length=200)
    topic = models.CharField(max_length=200)

I am loading in my fixtures test data, populating my 'BaseModule' database:

fixtures = ['test/fixtures/initial_data.json']

Then creating a User object, but I cant figure out how to create a relationship between a User and BaseModule.

Ive tried many things, including:

# this works, but creates a new BaseModule, I want to create a relationship with one generated in 'fixtures'
test = person.modules.create(topic='test')
test.save()

# this doesnt work
testModule = BaseModule.objects.get(pk=1)
person.modules.set(testModule)

# this doesnt work either
person.modules.create()
person.modules.basemodule_id = 1
person.refresh_from_db()

for module in person.modules.all():
    print("module.topic:")
    print(module.topic)
    print("end")

Thank you.


Solution

  • #this doesnt work
    testModule = BaseModule.objects.get(pk=1)
    person.modules.set(testModule)
    

    You should add brackets []

    testModule = BaseModule.objects.get(pk=1)
    person.modules.set([testModule])