假设我有这些模型和字段:
class User(AbstractBaseUser):
name_title
name_first
name_middle_initial
name_last
address_1
address_2
address_city
address_state
address_post_code
class Order(models.Model):
name_title
name_first
name_middle_initial
name_last
address_1
address_2
address_city
address_state
address_post_code
class Shipment(models.Model):
address_1
address_2
address_city
address_state
address_post_code
也可以说,这些模型都不一定相关——订单不一定属于用户,发货不一定属于订单,等等
我希望所有重复字段都相同——具有相同的详细名称、验证、最大长度等
我尝试过采用mixin方法:
class AddressFieldsMixin(models.Model):
address_1
address_2
address_city
address_state
address_post_code
class NameFieldsMixin(models.Model):
name_title
name_first
name_middle_initial
name_last
class User(AbstractBaseUser, AddressFieldsMixin, NameFieldsMixin):
pass
class Order(models.Model, AddressFieldsMixin, NameFieldsMixin):
pass
class Shipment(models.Model, AddressFieldsMixin):
pass
…但如果我的Mixin
类继承自models.Model
,则会导致模型/继承冲突,如果不继承,则会导致“未知字段”错误
在多个型号中重复使用“名称”字段和“地址”字段的正确方法是什么?谢谢
你应该制作你的模型。比如:
因为这些模型也继承自
models.Model
,所以它们不是mixins [wiki],或者至少不是在非常严格的定义中。此外,您应该将这些类放在第一位,因为它们从models.Model
继承,如果您指定models.Model
作为第一个祖先,这将导致MRO冲突正如文档所述,抽象模型旨在简化字段和行为的继承:
相关问题 更多 >
编程相关推荐