Django 从 2.0 迁移到 2.2(查看权限问题)
Django Migration from 2.0 to 2.2(View Permissions Issue)
迁移 Django 时遇到与迁移相关的问题:
python manage.py migrate demo --database demo
获取与 :
相关的错误
ValueError: Cannot assign "ContentType: ContentType object (1)": the current database router prevents this relation.
Detailed Error Log : https://ideone.com/z6NPkq
已测试 Django 版本:在 Django 版本 2.0.13 之后,面临这个问题。
让我知道这可能是什么原因?
编辑:在Django 2.1中找到原因,他们添加了视图权限:Source
为什么查看权限没有自动生成?
解决方案:在Django模块中,如果我们将移动到文件路径:django/contrib/auth/management/__init.py
我们必须更改行号:79
Permission(codename=codename, name=name, content_type=ct)
到
Permission(codename=codename, name=name, content_type_id=ct.id)
我在 Django 中调试后找到了这个解决方案,但仍然无法理解为什么会这样。让我知道其他解决方案以及此解决方案的任何原因。
EDIT-1:寻找答案,这样我就不必更改核心 Django 模块(库)。
解法-1 :
def allow_relation(self, obj1, obj2, **hints):
if obj1._state.db == "demo" or obj2._state.db=="demo":
return True
return obj1._state.db == obj2._state.db
注意:在我的例子中,其他数据库正在使用演示数据库表作为参考,因此在Approuter class自定义了allow_relation方法。
似乎是路由器问题。这应该是因为您正在使用具有多个数据库配置的 Django。
您需要覆盖应用程序路由器中的 allow_relation 函数,以允许存在 content-type 的数据库与根据上述示例的演示数据库之间的关系。
迁移 Django 时遇到与迁移相关的问题:
python manage.py migrate demo --database demo
获取与 :
相关的错误ValueError: Cannot assign "ContentType: ContentType object (1)": the current database router prevents this relation.
Detailed Error Log : https://ideone.com/z6NPkq
已测试 Django 版本:在 Django 版本 2.0.13 之后,面临这个问题。
让我知道这可能是什么原因?
编辑:在Django 2.1中找到原因,他们添加了视图权限:Source
为什么查看权限没有自动生成?
解决方案:在Django模块中,如果我们将移动到文件路径:django/contrib/auth/management/__init.py
我们必须更改行号:79
Permission(codename=codename, name=name, content_type=ct)
到
Permission(codename=codename, name=name, content_type_id=ct.id)
我在 Django 中调试后找到了这个解决方案,但仍然无法理解为什么会这样。让我知道其他解决方案以及此解决方案的任何原因。
EDIT-1:寻找答案,这样我就不必更改核心 Django 模块(库)。
解法-1 :
def allow_relation(self, obj1, obj2, **hints):
if obj1._state.db == "demo" or obj2._state.db=="demo":
return True
return obj1._state.db == obj2._state.db
注意:在我的例子中,其他数据库正在使用演示数据库表作为参考,因此在Approuter class自定义了allow_relation方法。
似乎是路由器问题。这应该是因为您正在使用具有多个数据库配置的 Django。 您需要覆盖应用程序路由器中的 allow_relation 函数,以允许存在 content-type 的数据库与根据上述示例的演示数据库之间的关系。