Django 从 2.0 迁移到 2.2(查看权限问题)

标签 django python-3.x django-admin django-2.1 django-permissions

迁移 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 中找到原因,他们添加了 View 权限:Source

为什么 View 权限没有自动生成?

解决方案 :在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类定制允许关系 方法。

最佳答案

好像是路由器的问题。这应该是因为您正在使用具有多个数据库配置的 Django。
根据上面的示例,您需要覆盖应用路由器中的 allow_relation 函数,以允许存在 content-type 的数据库和演示数据库之间的关系。

关于Django 从 2.0 迁移到 2.2(查看权限问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377147/

相关文章:

python - 使用 pip 安装factory_boy 时遇到问题

python - Django Admin - 表格内联外键字段列表的动态值

Django admin 外键下拉字段列表仅 "test object"

python - 我应该如何在数据框中找到也包含 Null 值的数字列?

python-3.x - 我无法按列值过滤数据框

python - 在 django admin 中控制 TextArea 小部件的大小

python - 使用pip安装python包报错

Django 覆盖详细信息 View 获取方法

django - 使用views.py中的主键重定向

python - 生成自定义 pyunit 报告