【发布时间】:2019-06-20 02:43:55
【问题描述】:
假设我有这些模型和字段:
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
我们也可以说,这些模型都不一定相关——订单不一定属于用户,发货不一定属于订单,等等。
我希望所有重复字段都相同——具有相同的 verbose_name、validations、max_length 等。
我尝试过采用 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,则会导致模型/继承冲突,如果不继承,则会出现“未知字段”错误。
在多个模型中重复使用“名称”字段和“地址”字段的正确方法是什么?谢谢!
【问题讨论】:
-
你应该把 mixins(从技术上讲,这些不是 mixins)放在继承的首位。