我实际上想知道模型类之间的区别
继承自 django 抽象类(Meta:abstract = True)和
普通的 Python 类继承自“object”(而不是
模型.模型)。
Django只会为子类生成表models.Model
,所以前者...
class User(models.Model):
first_name = models.CharField(max_length=255)
def get_username(self):
return self.username
class Meta:
abstract = True
class Employee(User):
title = models.CharField(max_length=255)
...将导致生成一个表,类似于...
CREATE TABLE myapp_employee
(
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(255) NOT NULL,
title VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
...而后者...
class User(object):
first_name = models.CharField(max_length=255)
def get_username(self):
return self.username
class Employee(User):
title = models.CharField(max_length=255)
...不会导致生成任何表。
您可以使用多重继承来做这样的事情......
class User(object):
first_name = models.CharField(max_length=255)
def get_username(self):
return self.username
class Employee(User, models.Model):
title = models.CharField(max_length=255)
...这将创建一个表,但它将忽略中定义的字段User
类,所以你最终会得到一张像这样的桌子......
CREATE TABLE myapp_employee
(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);