Django 如何使用';通过';与固定装置的关系?
在测试(fixture)中,我想添加具有“through”关系的多个字段,即Django 如何使用';通过';与固定装置的关系?,django,django-models,pytest,fixtures,pytest-django,Django,Django Models,Pytest,Fixtures,Pytest Django,在测试(fixture)中,我想添加具有“through”关系的多个字段,即 my_field = models.ManyToManyField(SomeModel, through=AnotherModel). 尝试添加类似常规的许多字段,如: object.my_field.add(my_field) 但它给了我一个警告信息: 此外,我还尝试了以下方法: object.my_field.add(my_field, through_defaults=AnotherModel) 也不起作用
my_field = models.ManyToManyField(SomeModel, through=AnotherModel).
尝试添加类似常规的许多字段,如:
object.my_field.add(my_field)
但它给了我一个警告信息:
此外,我还尝试了以下方法:
object.my_field.add(my_field, through_defaults=AnotherModel)
也不起作用您只需构造一个
AnotherModel
对象,因此:
AnotherModel.objects.create(firstmodel=object, somemodel=myfield)
有关通过默认设置的的更多信息,请参阅。其中包含一个示例,如:
beatles.members.set([john,paul,ringo,george],通过默认值={'date\u joined':date(1960,8,1)})
在本例中,披头士
对象的成员
是一个带有中间模型的ManyToManyField
,这里我们填写日期(1960,8,1)
作为date\u加入该模型的值。@DinaNasyrkhan:aManyToManyField
只不过是一个模型,它有两个与其链接的模型的外键。如果您自己没有通过
模型指定一个,Django会自动创建一个。在窗帘后面,如果你使用.add()
,它将创建一个AnotherModel
,因此添加一个额外的固定装置确实没有多大用处。看,我有这个:restaurant.contract.add(contract,通过默认值=restaurant\u contract),这里restaurant\u contract是另一个固定装置(带有AnotherModel.objects.create)(firstmodel=object,somemodel=myfield))。这仍然给我一个错误。也尝试过:restaurant.contract.add(contract,通过默认值={'restaurant'=restaurant,'contract'=contract}),仍然不起作用,如果我没有添加额外的文件,并像restaurant.contract.add(contract)一样离开,它说它不正确(上面的警告消息)。有什么解决办法吗?@DinaNasyrkhan:我在[implementation of.add(…)
]中找不到错误消息,也许你使用了一些信号、其他插件等来防止这种情况。但我设法复制了添加关系对象。@DinaNasyrkhan:你有没有可能使用旧版本的Django?在2.2之前使用.add(..)
对于具有至
模型的m2m字段,iirc是不可能的。
object.my_field.add(my_field, through_defaults={'field1': 14, 'field2': 25})
beatles.members.set([john, paul, ringo, george], through_defaults={'date_joined': date(1960, 8, 1)})