Python Django重复模型定义/字段
以下是我使用的:Python Django重复模型定义/字段,python,django,model-view-controller,metaclass,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(我只希望有两个模型/类),如何做到这一点呢?您必须使用元类吗?使aa: 还要注意类名应该是大写的,
class a(models.Model):
x = models.CharField()
class b(a):
pass
问题是,当创建b的实例时,也会创建a的实例,我猜这是因为b继承了Django分配的某些属性,例如数据库表。我想让b拥有所有的字段和方法,这样就不会发生重复。如果不简单地将所有代码从a复制粘贴到b,或者使用抽象基类c,并且a和b都继承自c(我只希望有两个模型/类),如何做到这一点呢?您必须使用元类吗?使a
a:
还要注意类名应该是大写的,所以应该是A
和B
,但是x
是正确的
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
这难道不会导致无法创建的实例吗?显然,解决方案是创建第三个类作为抽象基类,并从中继承a和b,但有没有办法只使用两个类/模型?对不起,我没说清楚,我会更新问题的
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