Django重复模型定义/字段

wee*_*eeb 1 python django model-view-controller metaclass

这是我正在使用的:

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

class b(a):
    pass
Run Code Online (Sandbox Code Playgroud)

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

ays*_*cuk 5

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

class B(A):
    pass
Run Code Online (Sandbox Code Playgroud)

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

例如:假设abstract是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
Run Code Online (Sandbox Code Playgroud)