首页 > 解决方案 > Django根据与其他模型的关系更改模型值

问题描述

我正在开发一个具有三个模型的项目,其中一个模型的值取决于其他两个模型是否通过外键链接到它。如果链接发生变化,该值也可以切换。我想知道我会怎么做。

例如:

通用/models.py

class Person(models.Model):
    DEFAULT = 'D'
    A = 'A'
    B = 'B'
    BOTH = 'AB'
    TYPES = [
        (DEFAULT,'Default'),
        (A,'Type A'),
        (B,'Type B'),
        (BOTH,'Type A & B')
    ]
    # type is default if Person is not linked to A or B
    # A if Person is linked to A
    # B if Person is linked to B
    # BOTH if Person is linked to both
    type = models.CharField(max_length=2, choices=TYPES, default=DEFAULT)

一个/模型.py

class A(models.Model):
    person = models.ForeignKey('general.Person',on_delete=models.CASCADE)

B/模型.py

class B(models.Model):
    person = models.ForeignKey('general.Person',on_delete=models.CASCADE)

标签: pythondjango

解决方案


您应该重写模型 A 和 B 的保存方法,以便像这样修改 ForeignKey:

class A(models.Model):
    person = models.ForeignKey('general.Person',on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        if self.person.type == Person.B:
             self.person.type=Person.AB
             self.person.save()
        # elif...
        

推荐阅读