Django多字段自然键的多对多Fixture配置问题咨询
解决Django Fixture中多对多关联的自然键问题
你遇到的问题是多对多字段的自然键格式写错啦!单个自然键是双元素数组,但多个关联项的话,每个自然键都要作为独立的子数组放在外层数组里,不能把所有字段值平铺成一个大数组。
举个例子,你之前的错误写法:
"fields": { "areas": [ "auckland", "NZ", "sydney", "AUS" ] }
正确的写法应该把每个区域的自然键分别封装成子数组,像这样:
"fields": { "areas": [ ["auckland", "NZ"], ["sydney", "AUS"] ] }
为什么要这么写?因为Django解析fixture的多对多自然键时,会把外层数组里的每个元素当作完整的自然键处理——对应你Area模型里natural_key()方法返回的双字段元组(比如return (self.name, self.country_code))。每个子数组就是一个区域的唯一标识,这样Django才能正确匹配到对应的多个Area实例,完成多对多关联的创建。
如果你的关联模型自然键结构更复杂(比如3个字段),逻辑也是一样的:每个自然键对应一个子数组,所有子数组放在多对多字段的数组里即可。
内容的提问来源于stack exchange,提问作者Darkstarone
相关产品推荐
相关产品推荐

