django抽象模型与常规继承

除了语法外,使用django抽象模型和对django模型使用纯Python继承之间有什么区别?利弊?

更新:我认为我的问题被误解了,并且我收到了关于抽象模型与从django.db.models.Model继承的类之间的区别的答复。 我实际上想知道从Django抽象类(元:abstract = True)继承的模型类与从诸如“ object”(而不是models.Model)继承的普通Python类之间的区别。

这是一个例子:

class User(object):

first_name = models.CharField(..

def get_username(self):

return self.username

class User(models.Model):

first_name = models.CharField(...

def get_username(self):

return self.username

class Meta:

abstract = True

class Employee(User):

title = models.CharField(...

回答:

我实际上想知道从django抽象类继承的模型类(元:abstract = True)与从诸如“对象”(而不是models.Model)继承的普通Python类之间的区别。

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)

);

以上是 django抽象模型与常规继承 的全部内容, 来源链接: utcz.com/qa/414150.html

回到顶部