我的Django模型组织如下。
class Animal(models.Model):
first_name = models.CharField(max_length=128, unique=True)
class Meta:
abstract = True
class Cat(Animal):
def meow(self):
return "mreooooow"
class Dog(Animal):
def bark(self):
return "AARF!"
class EvilMonkey(Animal):
def plot_world_takeover(self):
return "muahahaha ..."
如你所见,每一只“动物”在其自己的物种中都有一个独特的名字。如何过滤名为“Ned”的动物? Animal.objects.filter(first_name="Ned")
显然无效。
答案 0 :(得分:2)
您可能想要走multi-table-inheritance的路线。这将允许您对基本模型进行查询。
答案 1 :(得分:1)
来自文档:
当您想将一些常见信息放入许多其他模型时,抽象基类非常有用。编写基类并在Meta类中放置abstract = True。 此模型将不会用于创建任何数据库表。相反,当它用作其他模型的基类时,其字段将添加到子类的字段中。
纳撒尼尔已经提到了解决方案。