Skip to main content
 首页 » 编程设计

python之向 Django 字段添加附加属性

2024年09月07日27dudu

考虑 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。