在测试中创建多对多关系
Create A Many-To-Many Relationship In A Test
我有一个多对多的关系:
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)
我正在加载我的固定装置测试数据,填充我的 'BaseModule' 数据库:
fixtures = ['test/fixtures/initial_data.json']
然后创建一个 User 对象,但我不知道如何在 User 和 BaseModule 之间创建关系。
我尝试了很多东西,包括:
# 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")
谢谢。
#this doesnt work
testModule = BaseModule.objects.get(pk=1)
person.modules.set(testModule)
你应该加括号[]
testModule = BaseModule.objects.get(pk=1)
person.modules.set([testModule])
我有一个多对多的关系:
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)
我正在加载我的固定装置测试数据,填充我的 'BaseModule' 数据库:
fixtures = ['test/fixtures/initial_data.json']
然后创建一个 User 对象,但我不知道如何在 User 和 BaseModule 之间创建关系。
我尝试了很多东西,包括:
# 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")
谢谢。
#this doesnt work
testModule = BaseModule.objects.get(pk=1)
person.modules.set(testModule)
你应该加括号[]
testModule = BaseModule.objects.get(pk=1)
person.modules.set([testModule])