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

时间:2012-05-29 18:32:29

标签: django merge foreign-key-relationship

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

例如:

我们有user_auser_b以及一些具有[{1}}模型外键的模型(UserBooksInterests和等......)。

通过合并用户,我想删除对象Teams并将指向此对象的所有外键设置为指向user_b。而且 - 这是我主要考虑的问题 - 我希望需要更改的对象因为它们引用要自动确定的待删除对象而不必手动指定这些模型和外键字段的列表。

这是否已经实施,我正在重新发明轮子?

这可能吗?

如果没有,请告诉我如何做到这一点:如何在运行时构建一个Django模型列表,其中包含特定模型的外键(在我的例子中为user_a)?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

我找到了这个代码段http://djangosnippets.org/snippets/2283/。我将不得不修改它,使其递归。一旦完成,我将分享我的代码。

答案 1 :(得分:2)

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

来实现这一目标

具体来说,您可以使用Options.get_fields。这甚至可以让你处理一般关系。

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

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