1 回答
TA贡献1847条经验 获得超7个赞
您应该制作模型abstract = True[Django-doc]。喜欢:
class AddressFieldsModel(models.Model):
address_1 = ...
address_2 = ...
address_city = ...
address_state = ...
address_post_code = ...
class Meta:
abstract = True
class NameFieldsModel(models.Model):
name_title = ...
name_first = ...
name_middle_initial = ...
name_last = ...
class Meta:
abstract = True
class User(AddressFieldsModel, NameFieldsModel, AbstractBaseUser):
pass
class Order(AddressFieldsModel, NameFieldsModel, models.Model):
pass
class Shipment(AddressFieldsModel, models.Model):
pass
由于这些模型也继承自models.Model,因此它们不是mixins [wiki],或者至少不是非常严格的定义。此外,您应该将这些类放在首位,因为它们继承自models.Model,并且如果您指定models.Model为第一个祖先,这将导致 MRO 冲突。
正如文档所述,抽象模型旨在使字段和行为的继承更容易:
当您想将一些公共信息放入许多其他模型中时,抽象基类很有用。你写你的基类并放入类abstract=True中Meta。该模型将不会用于创建任何数据库表。相反,当它用作其他模型的基类时,它的字段将添加到子类的字段中。
添加回答
举报