看看 Python Django开发 异常及解决办法


本文摘自php中文网,作者coldplay.xixi,侵删。

相关免费学习推荐: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后台时,在添加小部件时,会报错,如下:

returnwidget.render(TypeError: render() got an unexpected keyword argument'renderer'

解决办法有两种:

  • 修改Django源码
    找到lib\site-packages\django\forms\boundfield.py,找到第96行,注释掉即可,如下:

returnwidget.render(

    name=self.html_initial_nameifonly_initialelseself.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: Modelclassdjango.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),如下:
报错页面4
这可能是自定义用户模型代替Django自带的用户模型时,允许name(或相似的)字段允许为空,例如name = models.CharField(max_length=30, null=True, blank=True, verbose_name='姓名')所以会返回non-string报错,完整模型如下:

classUserProfile(AbstractUser):

    '''用户'''

    name = models.CharField(max_length=30, null=True, blank=True, verbose_name='姓名')

    birthday = models.DateField(null=True, blank=True, verbose_name='出生日期')

    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='是否删除')

 

    classMeta:

        verbose_name ='用户'

        verbose_name_plural ='用户'

 

    def __str__(self):

        returnself.name

解决办法有2种:

  • 退出admin或xadmin后台登录
    退出后台管理登录,操作如下:
    django xadmin logout
  • 修改用户模型__str__()方法
    因为自定义用户如UserProfile继承自AbstractUser,而AbstractUser模型有username属性,不允许为空,所以可以设置为返回self.username,即如下:

def __str__(self):

    returnself.username

此时不登出后台管理也可以正常访问。

5.DRF报错AssertionError:basenameargument not specified

在Restful framework中使用过滤器时报错:

assert queryset is not None,'`basename` argument not specified, and could '\

AssertionError: `basename` argument not specified,andcould not automatically determine the name from the viewset,asit does not have a `.queryset` attribute.

报错提示很明显,assert queryset不是None,未指定“basename”参数,显然需要在使用router定义路由时指定basename参数,如下:

router = DefaultRouter()# 配置goods的路由router.register(r'goods', GoodsListViewSet,basename='goods')

即在urls.py中使用router配置路由时加入basename参数即可。

6.UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list

paginator = self.django_paginator_class(queryset, page_size)
在Django Restful framework中实现视图时对某一类数据进行分页并在前端请求访问数据时显示警告信息如下:

XXX\lib\site-packages\rest_framework\pagination.py:200: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class'goods.models.Goods'> QuerySet.

  paginator = self.django_paginator_class(queryset, page_size)

阅读剩余部分

相关阅读 >>

Python 面向对象视频资料分享

怎么用cmd运行Python

Python在循环引用中如何管理内存

交叉验证以及Python代码实现

如何获取一个文件的创建和修改时间

j详解Python利用rsa库做公钥解密的方法

Python怎么启动

Python的调试;print()和断言(实例解析二)

Python怎么才算入门

Python如何查找字符串的长度?(代码示例)

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...