3

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

例如:

我们有user_auser_b一些模型具有模型的外键UserBooksInterestsTeams等等......)。

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

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

这可能吗?

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

感谢您的时间。

4

2 回答 2

2

我找到了这个片段http://djangosnippets.org/snippets/2283/。不过,我将不得不对其进行修改,以使其具有递归性。完成后我将分享我的代码。

于 2012-11-28T15:55:53.123 回答
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
于 2016-11-09T01:01:20.627 回答