python - 自定义管理器和 "through"

标签 python django django-models many-to-many

我的 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/

相关文章:

python - Django 表单提交按钮

python - 如何允许用户选择文件?

python - 如何在 Django 之外使用 Django 模型?

python - Django Haystack w/Elasticsearch Dwithin投影或单位错误?

django - 使用包含 defer 的查询集在 Django 中序列化

python - 使用 Splinter 运行测试时 XPath 未解析为链接

django - 当 API 调用需要以纯文本形式发送密码时,将密码存储在数据库中的最佳方法是什么?

python - Django 1.7.6 与 Python 2.7.6 和 Virtualenv 12.0.7 (OSX10,10.2) - 模板渲染时出现模板语法错误

django - 如何在服务器启动时从模型加载对象?

python - Nullable DecimalField 在空白时返回 'This value must be a decimal number'