【发布时间】:2017-12-11 08:11:21
【问题描述】:
我有 3 个模型,帐户、公司和产品。产品有一个外键到公司、公司和外键帐户。 它们都有一个名为“is_active”的字段。
class Product(Meta):
company = models.ForeignKey(Company, related_name='products', on_delete=models.CASCADE)
is_active = models.BooleanField(default=False)
class Company(Meta):
account = models.ForeignKey(Account, related_name='account', on_delete=models.CASCADE)
is_active = models.BooleanField(default=False)
我需要什么:
- 当公司 is_active 变为 False 我希望所有与公司相关的产品时,is_active 变为 false
- 当 Account is_active 变为 False 我希望所有与该帐户相关的公司,is_active 变为 false,并传播到产品
我知道我需要更改保存(或使用保存后信号),但我不知道如何选择和更改外键模型,并向下传播多个级别,以防帐户
父子之间的关系是反向的,而不是子父子之间的关系。,所以没有可用的字段 FK。
【问题讨论】:
-
反向关系的实例可通过
MODEL_set访问,例如对于 Company 实例,您可以通过company_instance.product_set访问其所有产品。这回答了你的问题了吗? docs.djangoproject.com/en/2.0/topics/db/queries/… -
@petr 我可以使用相关名称,而不是默认名称,但作为反向 FK,我需要遍历它们并在子模型上进行保存/更新,以防帐户传播进一步,我尝试了一些东西,但它们不起作用;也许你可以给我一个完整问题的例子
-
您不需要更进一步 - 两个模型都将覆盖
save()方法,这意味着当您将实例更改为一个关系时,其他模型将自动传播。
标签: django django-models