如何为其他类创建通用类也可以具有相同的模型

时间:2012-09-06 15:48:40

标签: python django class

我是Python和Django平台的新手。我正在尝试设计一个通用类,以便其他类可以使用通用类来创建相同的模型类型。为了更好地解释,我举了一个例子

让我说我的普通班是

class Person(models.Model):
 name = models.CharField(max_length=20)
 lastname=models.CharField(max_length=20)
 job=models.CharField(max_length=20)
 salary=models.IntegerField()

我想为我创建的每个人创建一个与Person类完全相同的表。

在我看来是这样的......

Class Person1(models.Model) 
Person()
Class Person2(models.Model) 
Person()

因此,每个人表都将具有与Person类相同的模型类型。你能帮帮我怎么做吗?或者有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

我不确定我理解你想要什么,或者为什么你想要那个,但是,我认为你的问题的答案是使用Abstract Base Class

示例:

class Person(models.Model):
   name = models.CharField(max_length=20)
   lastname = models.CharField(max_length=20)
   job = models.CharField(max_length=20)
   salary = models.IntegerField()

   class Meta:
       abstract = True


class Person1(Person):
    ...

答案 1 :(得分:1)

我认为你缺少的是对django模型的基本理解。

django中的模型是数据库中的表示。在此表中,您可以存储多行。您编写的每个字段都是此表中的一列。

当您拥有模型 Person 时,django将在数据库中创建一个表,其中包含您在 Person 类中定义的列。在此表中,您可以添加许多“人”项。

您无需为模型中已经描述过的相同内容创建其他模型。

继承是django模型中的一个高级概念,以后只会导致问题。我建议您逐步完成django tutorial,因为它解释了如何使用django对象关系模型(ORM) - 模型。

最终,你会意识到存储多个“人”,你只需要这样做:

personA = Person()
personA.name = 'John'
personA.lastname = 'Smith'
personA.job = 'Chef'
personA.salary = 130
personA.save()

personB = Person(name='Homer',lastname='Simpson',job='Donut Eater',salary=100)
personB.save()