Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将所有相关模型转移到Django中的不同用户_Django - Fatal编程技术网

将所有相关模型转移到Django中的不同用户

将所有相关模型转移到Django中的不同用户,django,Django,在我的django 1.8应用程序中,我可以通过user.\u meta.get\u fields()从用户的其他模型中获取所有链接对象。现在我想更新/传输所有链接对象以指向管理员用户 这就是我尝试过的: In [6]: from danube.people.models import Profile In [7]: admin = Profile.objects.get(id=1000) In [8]: user = Profile.objects.get(id=1002) In [9]

在我的django 1.8应用程序中,我可以通过
user.\u meta.get\u fields()
从用户的其他模型中获取所有链接对象。现在我想更新/传输所有链接对象以指向管理员用户

这就是我尝试过的:

In [6]: from danube.people.models import Profile

In [7]: admin = Profile.objects.get(id=1000)

In [8]: user = Profile.objects.get(id=1002)

In [9]: userData = user._meta.get_fields()

In [10]: for item in userData:
    ...:     extModel = item(related_model=admin)
    ...:     # extModel = item(related_model_id=1000)
    ...:     extModel.save()
    ...:     
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-aa9ee22a4e75> in <module>()
      1 for item in userData:
----> 2     extModel = item(related_model=admin)
      3     extModel.save()
      4 

TypeError: 'ManyToOneRel' object is not callable
[6]中的
:来自danube.people.models导入配置文件
在[7]中:admin=Profile.objects.get(id=1000)
在[8]中:user=Profile.objects.get(id=1002)
在[9]中:userData=user.\u meta.get\u fields()
在[10]中:对于userData中的项:
…:extModel=item(related_model=admin)
…:#extModel=item(相关的_model_id=1000)
…:extModel.save()
...:     
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
1对于userData中的项目:
---->2 extModel=项目(相关模型=管理)
3 extModel.save()
4.
TypeError:“ManyToOneRel”对象不可调用

如何克服
类型错误:“manytonerel”对象不可调用
错误?

以下是Django环境中的shell命令。这是一个可能的替代方案,以取代您迄今为止的尝试

old_profile = Profile.objects.get(id=1002)
old_profile.pk = None
old_profile.save()

# Old profile is now a new object
old_profile.user.is_staff = True
old_profile.user.is_superuser = True
old_profile.user.save()

Profile.objects.get(id=1002).delete()  # Delete the old user profile
这将复制旧用户,然后将其设置为具有管理员权限。它还将删除旧实例。也许这符合你的需要!祝你好运

编辑:你可以试试这样的东西(还没有测试过,所以要小心)

另一个想法是更改与每个配置文件关联的
用户
。因此,您有您的管理员
用户
和您想要保留其关联对象的配置文件

profile = Profile.objects.get(id=1002)
old_user = profile.user
admin_user = Profile.objects.get(id=1000).user
profile.user = admin_user
profile.save()
Profile.objects.get(id=1000).delete()

现在,您的管理员
用户
将链接到id=1002的配置文件
。也许这会有帮助?

那么
user.user.is_staff=True
或者
user.user.is_superuser=True
然后
user.user.save()
呢?也许是解决这个问题更简单的方法?很好。但是我想在以后删除用户,但不想丢失链接对象。刚才看到有“设置”用于on_delete。添加到用户模型这可能会有所帮助?!我的总体计划是在django admin中为管理员提供一些下拉列表,以定义谁应该继承对象:/好的,我将写一个答案,它可能对您有用,请查看!非常感谢@Sam Creamer,这绝对是有帮助的。一个问题。我的目标不是创建一个新的管理员用户,而是将所有链接的对象始终传输到具有pid 1000的同一用户。你看到了完成这件事的机会吗?很抱歉说@Sam Creamer,但我认为仍然存在误解。让我再解释一遍。假设您有一个用户Toni(id 1002),它与对象具有不同的关系。和一个管理员Sam(id 1000)。现在,当您在Django后端删除Toni时,它将警告您所有相关对象都将被删除。我会寻找一种方法将所有相关对象从Toni传输到Sam。这样我就不会丢失数据,并且可以安全地删除Toni。我知道on_delete on fk定义,但会想办法将其作为管理命令,比如([pseudo code]manage.py transfer_objects--from=Toni--to Sam)我会偷偷地在Django代码中看看他们是如何使用on_delete的,如果你有一个想法或出发点,我将欠你一杯啤酒:)你可以将on_delete属性更改为各种不会删除对象的东西。您可以编写一个脚本(正如您所做的那样)来很容易地将对象的关系从一个概要文件更改为另一个概要文件!你本来是在正确的轨道上。我只是提供了两种不同的方法来复制或转移关系。