【问题标题】:Django - Where should signals be placed?Django - 信号应该放在哪里?
【发布时间】:2020-07-18 03:17:32
【问题描述】:

collection.models.py:

class Collection(Model):
  items = ManyToManyField(Item)
  ...

item.models.py

class Item(Model):
  state = OneToOneField('ItemState')
  ...

class ItemState(Model):
  item = ForeignKey('Item')
  ...

结构说明:一个item一次只有一个状态,但是客户端想要跟踪它的状态历史。

我想编写一个在创建集合时创建新状态的信号。由于循环导入,我将信号与模型分开。现在我的问题是我是否在collection_signals.pyitem_state_signals.py 下为上述信号编写信号。

我的猜测是两者都可以,但是搜索上述信号的合理位置是什么?我假设 Collection 因为 Collection 是发送者,但这又是关于创建状态和各种模型将创建状态(例如,当创建一个新项目时也应该触发一个新状态)

【问题讨论】:

  • 你的信号到底在做什么,你可以考虑覆盖保存方法而不是使用信号

标签: python django django-models django-signals


【解决方案1】:

我认为 collectionitem 是你的两个 Django 应用程序。因此,在应用内创建一个名为 signals.py 的模块。所以,会有两个文件(理想情况下)

  1. collection/signals.py
  2. item/signals.py

我想编写一个信号,在创建 Collection 时创建一个新状态。

所以,这里的 sender 将是 Collection通常,对应的信号将在 collection/signals.py

简而言之,查看您的 sender 类,检查它所属的位置并在应用内创建信号。

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2012-08-08
    • 2022-10-05
    • 2012-02-17
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多