python - 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)
解决方案
您应该重写模型 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...
推荐阅读
- charts - 谷歌折线图去除背景颜色
- python-3.x - Python3 discord selfbot NameError: name 'tokens' is not defined
- plot - Power-BI/DAX 累积计数值
- python-3.x - 如何在带有条件参数的函数中触发正确的条件语句
- python - 如何设置geojson的样式?
- python - 使用 BeautifulSoup 抓取 Quora 问答
- c# - C#:无法绑定到 DataSource 上的属性或列名
- javascript - 如何将 Chargify 托管页面重定向到不同的 URL
- r - 如何根据特定序列中出现的值改变列?
- javascript - Javascript - 比较是否标记了任何复选框