Python django中的多表继承

Python django中的多表继承,python,django,Python,Django,我在django中使用多表继承。模型忍者继承自人。在我的测试中,我创建了两个忍者实例和一个人实例。我正在做: self.assertEquals(Person.objects.count(), 3) 但计数是1。为什么不是3号?我的印象是为每个忍者创建了一个人表 根据你的描述,忍者是一个人。因此,你有三个人:1个普通人,2个忍者 这是故意的行为。如果你想知道哪些人不是别的什么人(在你的例子中不是忍者),你必须明确地向ORM询问。例如: Person.objects. exclude(id_

我在django中使用多表继承。模型忍者继承自人。在我的测试中,我创建了两个忍者实例和一个人实例。我正在做:

self.assertEquals(Person.objects.count(), 3)

但计数是1。为什么不是3号?我的印象是为每个忍者创建了一个人表

根据你的描述,忍者是一个人。因此,你有三个人:1个普通人,2个忍者

这是故意的行为。如果你想知道哪些人不是别的什么人(在你的例子中不是忍者),你必须明确地向ORM询问。例如:

Person.objects.
  exclude(id__in=Ninja.objects.values('id')).
  exclude(id__in=SomeOtherPersonSubclass.objects.values('id'))
我不确定代码是否正确/有效,但我认为它传达了这个想法

事实上,您的数据库没有按预期运行(如您在评论中所述),这是因为,为了拥有一个忍者实例,它需要it人员“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"
    }
  }
]

你是对的-如果你有2个
Ninja
实例和1个
Person
实例
Person.objects.count()
将是3。一定还有别的事情发生。也许您应该显示创建代码。你在保存实例吗?我应该注意,计数忍者返回2。我正在使用json装置创建数据库。另一个奇怪的行为:Ninja.objects.all()返回一个空列表,但Person.objects.all()返回一个非Ninja实例。有没有办法只检查数据库,看看发生了什么?你能发布你的代码吗,否则我们就有可能白白讨论。