【Django】Django4.1.2使用xadmin避坑指南(二)

简介: 【Django】Django4.1.2使用xadmin避坑指南(二)

环境

win10 python3.9.0 django4.1.2

问题一:if not ContentType._meta.installed:这一句报错:AttributeError: 'Options' object has no attribute 'installed'

我还研究了很久啥原因,看了看源码,后来直接看这段代码的意思,就是让把django.contrib.contenttypes安装到INSTALLED_APPS中,我检查了一下,安装了呀。
解决办法:直接注释掉,当然这样就没有检查安装django.contrib.contenttypes的过程了。

# if not ContentType._meta.installed:
#     raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in "
#                                "your INSTALLED_APPS setting in order to use the admin application.")

看源码,Django 2.0.x的源码中Options是有这个属性方法的,3.2.x也有,4.0.x也有。

/django/db/models/options.py
@property
def installed(self):
    return self.app_config is not None

在Django的release note中没有看到提及,[看GitHub的代码历史,是被移除了,说没用]

问题二:TypeError: never_cache didn't receive an HttpRequest. If you are decorating a classmethod, be sure to use @method_decorator.

这个exception好像还没解决

我是注释掉了:

        # if not hasattr(request, "META"):
        #     raise TypeError(
        #         "never_cache didn't receive an HttpRequest. If you are "
        #         "decorating a classmethod, be sure to use @method_decorator."
        #     )

问题三: return bool(self.request.is_ajax() or self.request.GET.get('_ajax'))报错:AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'

这个Django 3.1的release note有提到

The HttpRequest.is_ajax() method is deprecated as it relied on a jQuery-specific way of signifying AJAX calls, while current usage tends to use the JavaScript Fetch API. Depending on your use case, you can either write your own AJAX detection method, or use the new HttpRequest.accepts() method if your code depends on the client Accept HTTP header.
If you are writing your own AJAX detection method, request.is_ajax() can be reproduced exactly as request.headers.get('x-requested-with') == 'XMLHttpRequest'.

可以像这样用,创建一个自定义函数,进行检查:

def is_ajax(request):
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

网上的例子:

from django.shortcuts import HttpResponse


def is_ajax(request):
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'


def ajax_test(request):
    if is_ajax(request=request):
        message = "This is ajax"
    else:
        message = "Not ajax"
    return HttpResponse(message)

解决方法:

        # return bool(self.request.is_ajax() or self.request.GET.get('_ajax'))
        return bool(self.request.headers.get('x-requested-with') == 'XMLHttpRequest' or self.request.GET.get('_ajax'))

当我解决完这个问题的时候,真心建议别用Django4尝试搭配xadmin了。:cry:想完全适配没那么容易。

问题四:except models.FieldDoesNotExist:报错:AttributeError: module 'django.db.models' has no attribute 'FieldDoesNotExist'

解决方法:

最上面导包的代码
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
改成
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist, FieldDoesNotExist
报错的那个位置改成
# except models.FieldDoesNotExist:
 except FieldDoesNotExist:

问题五:django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 2: 'ifequal'. Did you forget to register or load this tag?

解决方法:找到报错的模板文件,我报错的是项目根路径/venv/Lib/site-packages/xadmin/templates/xadmin/includes/pagination.html

把ifequal a b 改成 if a == b
把endifequal 改成 endif

问题六:name 'smart_text' is not defined

在使用过程中还会有多处报这个错误,或者类似的,因为新的Django没有这个方法了,改成了force_strsmart_str。就照着下面对比着改,缺哪个改哪个。
解决方法:

from django.utils.encoding import force_str, smart_str
force_text = force_str
smart_text = smart_str

在这里插入图片描述
可以用了!

我把改好的xadmin源码上传了一份到GitHub上,希望能够给个star:star:!

[Django4.1.2-xadmin]

相关文章
|
数据库 Python
【Django】Django4.1.2使用xadmin避坑指南
【Django】Django4.1.2使用xadmin避坑指南
django2使用xadmin打造适合国人的后台管理系统(2)
在django2使用xadmin打造适合国人的后台管理系统(1)中已经集成好了xadmin,那么接下来就开始来使用xadmin以及做一些常用设置。 1.首先设置支持中文,修改settings文件中的 LANGUAGE_CODE = 'zh-hans', TIME_ZONE ='Asia/Shanghai'。
2446 0
|
Python 数据安全/隐私保护 前端开发
django2使用xadmin打造适合国人的后台管理系统(1)
       python火了之后,学习python的人也越来越多了,python做web开发的话,flask、django是比较火的框架了,django是一个比较大的框架,也是一个快速开发利器。
2261 0
|
Python 前端开发 数据库
Python3 | Django后台管理框架Xadmin安装指南
Django是python的重量级web框架,写得少,做得多,非常适合后端开发,它很大的一个亮点是,自带后台管理模块,但它自带的后台管理有点丑,而Xadmin是基于bootstrap开发的一套后台管理框架,界面非常美观,只需几步就可以替换自带的Dja...
2149 0
|
数据库 Python 关系型数据库
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
104 4
|
2月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
13天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
65 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
13天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
43 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
9天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
22 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台