1.Django xadmin数据迁移报错ImportError: cannot import name ‘QUERY_TERMS’
在进行Django xadmin数据迁移时报错:
from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
ImportError: cannot import name 'QUERY_TERMS' from 'django.db.models.sql.query' (C:\Users\LENOVO\.virtualenvs\Django_Vue_Fresh_Ecommerce-NKba4OvD\lib\site-packages\django\db\models\sql\query.py)
由于xadmin的更新跟不上Django的更新,因此导致了xadmin的很多代码出错,需要进行修改,这里将xadmin\plugins\filters.py中
from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
修改为
from django.db.models.sql.query import LOOKUP_SEP, Query
,还需要将47行的
if len(parts) > 1 and parts[-1] in Query:
修改为
if len(parts) > 1 and parts[-1] in QUERY_TERMS:
。
2.Django xadmin报错TypeError: render() got an unexpected keyword argument ‘renderer’
在Django登录进入xadmin后台时,在添加小部件时,会报错,如下:
return widget.render(
TypeError: render() got an unexpected keyword argument 'renderer'
解决办法有两种:
修改Django源码
找到lib\site-packages\django\forms\boundfield.py,找到第96行,注释掉即可,如下:
return widget.render(
name=self.html_initial_name if only_initial else self.html_name,
value=self.value(),
attrs=attrs,
# renderer=self.form.renderer,
)
此时再点击Add Budgets就不会再报错了。
修改xadmin代码
在xadmin/views/dashboard.py中修改
render()
函数,第36行改为
def render(self, name, value, attrs=None, renderer=None):
,即增加renderer参数为None。
两种方法皆可,但是个人建议采用第二种方法,因为xadmin是外部引入到extra_apps作为外部的app,本身就可能经过了一定修改,在此基础上再修改也影响不大,而django是虚拟环境所带的依赖库,相当于是系统文件,因此不要轻易修改。
3.Django xadmin报错RuntimeError: isn’t in an application in INSTALLED_APPS.
在进行数据库映射时,报错如下:
raise RuntimeError(
RuntimeError: Model class django.contrib.admin.models.LogEntry doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
解决办法是在settings.py中的INSTALLED_APPS中增加
django.contrib.admin
,如下:
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.users.apps.UsersConfig',
'goods',
'trade',
'user_operation',
'DjangoUeditor',
'xadmin',
'crispy_forms',
'django.contrib.admin'
]