我的 django 应用程序中有一个多对多关系,我大量使用管理器的“add”方法(即 album.photos.add() )。
我发现自己现在需要存储一些有关多对多关系的数据,但我不想丢失 add 方法。我可以为“through”模型上的所有附加字段设置默认值并以某种方式重新实现 add 方法吗?
我对自定义管理器了解不多,但我怀疑这可能是合适的地方。
更新:
一直在阅读custom managers 。当我将“through”参数添加到多对多字段时,也许我可以阻止添加/删除/等被禁用?
有人知道怎么做吗?
最佳答案
最简单的方法是向相册添加一个方法(即 album.add_photo()),该方法处理元数据并手动创建正确链接的照片实例。
如果你想变得更时髦,你可以为照片编写一个自定义管理器,将其设为默认管理器(即第一个分配的管理器),设置 use_for_related_fields = True并为其提供一个 add() 方法,该方法能够正确设置关系的默认元数据。
旁白:对于 Django 来说,让这个通用化似乎并不太难;当存在直通表时,不必删除 add() 方法,只需让 add() 接受任意 kwargs 并将它们视为直通表的数据即可。
关于python - 自定义管理器和 "through",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1038542/