用于合并Django用户对象的第三方应用程序?

用于合并Django用户对象的第三方应用程序?,django,merge,foreign-key-relationship,Django,Merge,Foreign Key Relationship,我需要在Django数据库中合并两个用户。 所以我想知道是否有任何简单的方法(也许是一个专用的应用程序)可以做到这一点 例如: 我们有user\u a和user\u b以及一些具有user模型外键的模型(书籍,兴趣,团队等等…) 通过合并用户,我希望删除对象user\u b,并将指向此对象的所有外键设置为指向user\u a。而且–这是我主要关心的–我希望需要更改的对象能够自动确定,因为它们引用了要删除的对象,而无需手动指定这些模型的列表和其中的外键字段 这已经实现了吗?我正在重新发明轮子 这可

我需要在Django数据库中合并两个用户。 所以我想知道是否有任何简单的方法(也许是一个专用的应用程序)可以做到这一点

例如:

我们有
user\u a
user\u b
以及一些具有
user
模型外键的模型(
书籍
兴趣
团队
等等…)

通过合并用户,我希望删除对象
user\u b
,并将指向此对象的所有外键设置为指向
user\u a
。而且–这是我主要关心的–我希望需要更改的对象能够自动确定,因为它们引用了要删除的对象,而无需手动指定这些模型的列表和其中的外键字段

这已经实现了吗?我正在重新发明轮子

这可能吗?

如果没有,请告诉我方法:如何在运行时构建具有特定模型外键的Django模型列表(
User


谢谢您抽出时间。

我找到了这个片段。不过,我必须修改它,使其具有递归性。完成后,我将分享我的代码。

我找到了这段代码。不过,我必须修改它,使其具有递归性。完成后,我将分享我的代码。

使用Django 1.8及更高版本,您可以使用

具体来说,您可以使用。这甚至可以让您处理泛型关系

您需要考虑每个相关字段是否要在合并上添加或替换。这个决定取决于应用程序逻辑和相应的模式选择

u = User.objects.get(pk=123)
related_fields = [
    f for f in u._meta.get_fields()
    if (f.one_to_many or f.one_to_one)
    and not f.concrete
]
for f in related_fields:
    # use field's attributes to perform an update

使用Django 1.8及更高版本,您可以通过使用

具体来说,您可以使用。这甚至可以让您处理泛型关系

您需要考虑每个相关字段是否要在合并上添加或替换。这个决定取决于应用程序逻辑和相应的模式选择

u = User.objects.get(pk=123)
related_fields = [
    f for f in u._meta.get_fields()
    if (f.one_to_many or f.one_to_one)
    and not f.concrete
]
for f in related_fields:
    # use field's attributes to perform an update