Django models.Model超类

时间:2011-10-02 06:51:49

标签: python django

我想创建一个models.Model类,它不会成为数据库的一部分,而只是其他模型的接口(我想避免重复代码)。

类似的东西:

class Interface(models.Model):
    a = models.IntegerField()
    b = models.TextField()

class Foo(Interface):
    c = models.IntegerField()

class Bar(Interface):
    d = models.CharField(max_length='255')

所以我的数据库应该只有Foo(带a,b,c列)和Bar(带a,b,d),但不能有表接口。

2 个答案:

答案 0 :(得分:10)

"Abstract base classes"

  

当您想要将一些公共信息放入许多其他模型时,抽象基类非常有用。编写基类并将abstract=True放在Meta类中。然后,此模型不会用于创建任何数据库表。相反,当它被用作其他模型的基类时,它的字段将被添加到子类的字段中。

答案 1 :(得分:1)

您可以像这样定义类:

from django.db import models

class CommonInfo(models.Model):
    name = models.CharField(max_length=100)
    age = models.PositiveIntegerField()

    class Meta:
        abstract = True

class Student(CommonInfo):
    home_group = models.CharField(max_length=5)