3

这是我使用的:

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

class b(a):
    pass

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

4

2 回答 2

6
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
于 2012-11-02T09:15:36.337 回答
1

制作抽象模型a

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

还要注意,类名应该是大写的,所以应该是Aand B,但是x是正确的。

于 2012-11-02T05:34:31.870 回答