相关免费学习推荐:python视频教程
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']
4.Django配置Restful framework报错__str__ returned non-string (type NoneType)
在Django项目中配置Restful framework时,报错__str__ returned non-string (type NoneType),如下:
这可能是自定义用户模型代替Django自带的用户模型时,允许name(或相似的)字段允许为空,例如name = models.CharField(max_length=30, null=True, blank=True, verbose_name='姓名')
所以会返回non-string报错,完整模型如下:
class UserProfile(AbstractUser): '''用户''' name = models.CharField(max_length=30, null=True, blank=True, verbose_name='姓名') birthday = models.DateField(null=True, blank=True, verbose_name='出生日期&<strong>本文来源gaodai#ma#com搞@代~码^网+</strong>#39;) gender = models.CharField(max_length=6, choices=(('male', u'男'), ('female', u'女')), default='female', verbose_name='性别') mobile = models.CharField(max_length=11, verbose_name='电话') email = models.CharField(max_length=50, null=True, blank=True, verbose_name='邮箱') is_delete = models.BooleanField(default=False, verbose_name='是否删除') class Meta: verbose_name = '用户' verbose_name_plural = '用户' def __str__(self): return self.name