Django重复模型定义/字段

时间:2012-11-02 05:30:56

标签: python django model-view-controller metaclass

这是我正在使用的:

class a(models.Model):
    x = models.CharField()

class b(a):
    pass

这个问题是当创建一个b的实例时,也会创建一个a的实例,我猜这是因为b继承了Django分配的一些属性,比如数据库表。我希望b拥有所有的字段和方法,以便不会发生这种重复。如何才能完成而不是简单地复制和粘贴a到b中的所有代码或使用抽象基类c并且a和b都从c继承(我想只有两个模型/类)? 你必须使用元类吗?

2 个答案:

答案 0 :(得分:5)

class A(models.Model):
    #some fields here
    x = models.CharField()
    class Meta:
        abstract = True

class B(A):
    pass

A将是一个抽象类,您不能单独使用此类。但据我了解,您希望有两个真正的课程AB。在这种情况下,您需要第三个(抽象)类C。因此,他们将从抽象字段继承字段并向其添加额外字段。

例如: 假设抽象是C

class C(models.Model):
    # the common fields 
    class Meta:
        abstract = True
class A(C):
    #extra fields if you need or pass
class B(C):
     #extra fields if you need or pass

答案 1 :(得分:1)

a成为abstract model

class a(models.Model):
    class Meta:
        abstract = True
    x = models.CharField()

另请注意,类名应为大写,因此应为AB,但x是正确的。