Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django重复模型定义/字段_Python_Django_Model View Controller_Metaclass - Fatal编程技术网

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