我有一个Django models.py声明了一堆不同的类,包括一些摘要,它们通过各种ForeignKey,OneToOne和ManyToMany相互关联关系。一些模型暗示与其他机器的交互 - 所以我使用Django的signals来观察相关模型的变化,并通知远程机器影响它们的变化。到目前为止,非常好。
由于存在大量信号和一堆模型,我将这些信号放在一个单独的文件(signals.py)中,并定义了几个函数来注册&取消注册为一组。 models.py的结尾只调用register_all()
,一切都是自动发生的。如果某些事情需要发生没有发送远程信号(例如单元测试),我可以事先打电话给unregister_all()
,然后register_all()
一旦我完成了奇怪的事情块。我喜欢从模型中分离信号,因为它使程序员更容易找到她正在寻找的东西。
(sender, **kwargs)
,并且(取决于信号),kwargs
可以包括项目"实例"和/或"模型"。仍然很好 - 这为我的代码提供了一个可靠的起点,可以进行任何查找。
现在,对于实际问题:是否有一种优选的方式可以连接3-5步?我可以在模式get_model('myapp', 'MyModel')
和MyModel = sender.parent.field.rel.to
之间进行选择,两者都可以正常工作。是否有理由选择其中一个?我希望最大限度地提高代码的可读性,并在关系或模型名称发生变化时尽可能轻松地进行更改....当然,快速&可靠的操作是首选。