【问题标题】:Custom Managers and "through"自定义管理器和“通过”
【发布时间】:2023-03-30 20:11:01
【问题描述】:

我在我的 django 应用程序中有一个多对多的关系,我非常频繁地使用管理器的“添加”方法(即 album.photos.add() )。

我发现自己现在需要存储一些关于多对多关系的数据,但我不想丢失 add 方法。我可以为“通过”模型上的所有附加字段设置一个默认值并以某种方式重新实现 add 方法吗?

我对自定义管理器了解不多,但我怀疑这可能是寻找合适的地方。

更新:

一直在阅读custom managers。当我将“通过”参数添加到我的多对多字段时,也许我可以阻止添加/删除/等被禁用?

有人知道怎么做吗?

【问题讨论】:

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


    【解决方案1】:

    最简单的方法是向相册添加一个方法(即album.add_photo()),该方法处理元数据并手动创建正确链接的照片实例。

    如果你想变得更时髦,你可以为 Photos 编写一个自定义管理器,将其设为默认值(即第一个分配的管理器),在其上设置 use_for_related_fields = True,并为其提供一个 add() 方法,它能够正确设置关系的默认元数据。

    除此之外:对于 Django 来说,使其通用化似乎并不难;当有一个直通表时,不要删除 add() 方法,只需让 add() 接受任意 kwargs 并将它们视为直通表的数据。

    【讨论】:

    • 我同意,至少他们应该创建一个泛型,如果您为直通表中的所有字段设置默认值,则可以让您保留 add() :/
    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多