考虑 Django 中的这个 Family 模型:
class Family(models.Model):
EMPLOYEE = 'Employee'
PARTNER = 'Partner'
BIRTH_PARENT_CHOICES = (
(EMPLOYEE, EMPLOYEE),
(PARTNER, PARTNER),
)
employee_user = models.OneToOneField(User, blank=True, null=True, related_name='employee_family')
partner_user = models.OneToOneField(User, blank=True, null=True, related_name='partner_family')
employee_first_name = models.CharField(max_length=255, blank=True)
employee_last_name = models.CharField(max_length=255, blank=True)
employee_email = models.CharField(max_length=255, blank=True)
employee_phone = models.CharField(max_length=255, blank=True)
partner_first_name = models.CharField(max_length=255, blank=True)
partner_last_name = models.CharField(max_length=255, blank=True)
partner_email = models.CharField(max_length=255, blank=True)
partner_phone = models.CharField(max_length=255, blank=True)
point_of_contact = models.CharField(max_length=255, choices=BIRTH_PARENT_CHOICES)
家庭 由一名雇员和一名合作伙伴组成,两者都有不同的属性(用户、名字、姓氏、电子邮件、电话)。还有一个 point_of_contact 字段,它可以是 'Employee' 或 'Partner'。
我想做的是,在 Family 的实例 family 上,做类似的事情
family.point_of_contact.phone_number
如果 family.point_of_contact == Family.EMPLOYEE 将解析为 family.employee_phone_number,否则解析为 family.partner_phone_number,对于 first_name, last_name 等
据我所知 https://docs.djangoproject.com/en/2.0/ref/models/fields/ ,但是,不可能在 Django 字段上定义附加属性。我可以通过其他方式做到这一点吗?
请您参考如下方法:
不,为此,您需要创建一个单独的模型 Contact 并使用 OneToOneField 从 Family 加入它如果每个家庭只能有一个联系人,或者如果每个家庭可以有多个联系人,则在您的 Contact 模型中使用 ForeignKey。
