我在django中使用多表继承。模特忍者继承自人。在我的测试中,我正在创建两个Ninja实例和一个Person实例。我在做:
self.assertEquals(Person.objects.count(), 3)
但数量是1.为什么不是3?我的印象是为每个Ninja创建了一个Person表。
答案 0 :(得分:2)
根据您的描述,忍者是一个人。因此,你有三个人:1个普通人,2个忍者。
这是预期的行为。如果你想知道不属于任何其他人的人(在你的情况下不是忍者),你必须明确地向ORM询问它。例如:
Person.objects.
exclude(id__in=Ninja.objects.values('id')).
exclude(id__in=SomeOtherPersonSubclass.objects.values('id'))
我不确定代码是否正确/有效,但我认为它传达了这个想法。
您的数据库没有按预期运行(正如您在评论中所说的那样)的事实是因为,为了拥有Ninja实例,它需要Person“part”,可以这么说。你必须有类似的东西:
[
{
"model": "myapp.person",
"pk": 1,
"fields": {
"first_name": "John",
"last_name": "Lennon"
}
},
{
"model": "myapp.person",
"pk": 2,
"fields": {
"first_name": "Hattori",
"last_name": "Hanzo"
}
},
{
"model": "myapp.ninja",
"pk": 2,
"fields": {
"super_power": "fearless tactics"
}
}
]