这是我正在使用的:
class a(models.Model):
x = models.CharField()
class b(a):
pass
这个问题是当创建一个b的实例时,也会创建一个a的实例,我猜这是因为b继承了Django分配的一些属性,比如数据库表。我希望b拥有所有的字段和方法,以便不会发生这种重复。如何才能完成而不是简单地复制和粘贴a到b中的所有代码或使用抽象基类c并且a和b都从c继承(我想只有两个模型/类)? 你必须使用元类吗?
答案 0 :(得分:5)
class A(models.Model):
#some fields here
x = models.CharField()
class Meta:
abstract = True
class B(A):
pass
A
将是一个抽象类,您不能单独使用此类。但据我了解,您希望有两个真正的课程A
和B
。在这种情况下,您需要第三个(抽象)类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()
另请注意,类名应为大写,因此应为A
和B
,但x
是正确的。