django - Django 从 2.0 迁移到 2.2(查看权限问题)
问题描述
迁移 Django 时面临与迁移相关的问题:
python manage.py 迁移演示--数据库演示
获取与以下相关的错误:
ValueError:无法分配“ContentType:ContentType object (1)”:当前数据库路由器阻止了这种关系。
Detailed Error Log : https://ideone.com/z6NPkq
测试 Django 版本:在 Django 版本2.0.13之后,面临这个问题。
让我知道这可能是什么原因?
编辑:在 Django 2.1 中找到了原因,他们添加了视图权限:来源
为什么视图权限没有自动生成?
解决方案:在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 类中自定义了allow_relation方法。
解决方案
好像是路由器的问题。这应该是因为您正在使用具有多个数据库配置的 Django。根据上面的示例,您需要覆盖应用路由器中的 allow_relation 函数,以允许存在 content-type 的数据库和演示数据库之间的关系。
推荐阅读
- python - 使用 Python 熊猫的嵌套 JSON 到 CSV 转换
- php - 更新json替换php中表单中的变量输入
- javascript - 如何在 PrimeNG 表上使用“分页符之前或之后”?
- linq - LINQ 从字符串中连续查找 3 次以上
- angular - 在 Angular 中显示来自服务的值时出错
- jsf - 在 p:dataTable 中输入文本的 ajax 调用需要很长时间才能呈现响应
- javascript - TypeError: Object(...) is not a function with React Table and moment.js
- node.js - 如何使用多个条件更新 Google Cloud Datastore 中的实体?
- widget - 带有 extension.xml 的 XPage 小部件
- postgresql - How do you JSON Marshall a pq.NullTime in UTC rather than the local timezone?