Django配置xadmin后台模板之坑(一)

<div id="cnblogs_post_body" class="blogpost-body "> <p><span style="font-size: 18pt;">安装Xadmin</span></p> <p><span style="font-size: 16px;">安装 Xadmin 的时候,须要注意 Django 的版本,Xadmin 在 Github 上的仓库 master 分支是支持 Django 1.9 版本的,假如是 Django 2.0 版本的,则须要从 Django2 分支安装</span></p> <p><span style="font-size: 16px;"># 从 PyPI 安装 支持 django 1.9</span></p> <p><span style="font-size: 16px;">pip install xadmin</span></p> <p><span style="font-size: 16px;"># 支持 django 1.4</span></p> <p><span style="font-size: 16px;">$ pip install django-xadmin</span></p> <p><span style="font-size: 16px;"># 从源码安装 支持django 2.0&nbsp;</span></p> <p><span style="font-size: 16px;">$ pip install git+git://github.com/sshwsfc/xadmin.git@django2</span></p> <p><span style="font-size: 16px;">以上安装方法会同时安装好须要的第三方库,而若是是直接在 Github 上下载 zip 源码包或是使用 git clone 命令,则须要本身安装,可使用一下命令</span></p> <p><span style="font-size: 16px;"># 在工程项目根目录中执行一下命令</span></p> <p><span style="font-size: 16px;">$ pip install -r requirements.txt</span></p> <p><span style="font-size: 18pt;">配置</span></p> <p><span style="font-size: 16px;">在setting中注册相应库</span></p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre>INSTALLED_APPS =<span style="color: #000000;"> [ ... </span><span style="color: #800000;">'</span><span style="color: #800000;">xadmin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #800000;">'</span><span style="color: #800000;">crispy_forms</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #800000;">'</span><span style="color: #800000;">reversion</span><span style="color: #800000;">'</span><span style="color: #000000;">, ]</span></pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p><span style="font-size: 16px;">添加url规则</span></p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #0000ff;">from</span><span style="color: #000000;"> django.urls import path import xadmin xadmin.autodiscover()javascript

version模块自动注册须要版本控制的 Model

</span><span style="color: #0000ff;">from</span><span style="color: #000000;"> xadmin.plugins import xversion xversion.register_models()java

urlpatterns </span>=<span style="color: #000000;"> [ # 将原先的 admin.site.urls 替换为如下 path(</span><span style="color: #800000;">'</span><span style="color: #800000;">admin/</span><span style="color: #800000;">'</span><span style="color: #000000;">, xadmin.site.urls), ]</span></pre>python

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.co<div id="cnblogs_post_body" class="blogpost-body "> <p>环境: Python3.6 + Django2.0 + xadmin2.0</p> <p>1、安装</p> <p>  一、首先安装就会有一个坑,不少教程的安装是直接在虚拟环境下使用 pip install xadmin&nbsp;或者 pip install django-xadmin</p> <p>    事实证实 Django2+xadmin2的版本是行不通的,&nbsp;正确方法是经过官方的github&nbsp;<a title="xadmin官网Github" href="https://github.com/sshwsfc/xadmin" target="_blank">https://github.com/sshwsfc/xadmin</a></p> <p>      <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807232619800-483239329.png" alt=""></p> <p>若使用 pip install xadmin可能会报以下错误,&nbsp;说是因为README.rst这个文件的编码有问题,其内容也只是安装的介绍,解决方法是</p> <p>  1)访问xadmin&nbsp;的 github下载其压缩包zip,而后解压</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;2 )&nbsp;直接在虚拟环境下运行 pip install &lt;压缩包路径&gt;&nbsp;如:pip install xadmin.zip</p> <p>  4 )&nbsp;此时xadmin及其依赖包被下载到&nbsp;虚拟环境下</p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807232914458-1396505512.png" alt=""></p> <p>&nbsp;</p> <p>  2.&nbsp;安装方法二:</p> <pre>    pip install git+git://github.com/sshwsfc/xadmin.git<br>      或者<br>    pip install git+git://github.com/sshwsfc/xadmin.git@django2</pre> <p>    以上两种方法只是面对的Django版本不一样,&nbsp;可自行选择。</p> <p>    该方法能够将xadmin和其依赖包直接安装虚拟环境下</p> <p>  3.&nbsp;安装方法三:</p> <p>    1)一样使用git clone&nbsp;或者下载zip压缩包的方式将源码下载到本地</p> <p>&nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807235122795-1306951434.png" alt=""></p> <p>    2 )&nbsp;拿到根目录下的xadmin,&nbsp;存放在 extra_apps(自定义)目录下,做为第三方依赖的存放目录</p> <p>    3 )&nbsp; 将extra_apps目录设置为 Resource Root,右键 Mark Directory as -&gt; Resource Root</p> <p>2、配置</p> <p>  不管使用哪种安装方式,&nbsp;接下配置而且migrate的顺序很重要,不然可能会引起一系列的报错,&nbsp;如下先使用方法二安装好依赖,&nbsp;再使用安装方法三引入xadmin。</p> <p>  1 )&nbsp; 使用 pip list&nbsp;能够查看依赖包, 使用方法一和二安装时自动安装,若是直接使用方法三安装依赖参考github,但比较麻烦。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; 2 )&nbsp;此处是使用&nbsp;&nbsp;pip install git+git://github.com/sshwsfc/xadmin.git@django2,&nbsp;能够同时安装依赖包,&nbsp;而后将虚拟环境下的xadmin卸载 pip uninstall xadmin ,&nbsp;再使用方法三extra_apps方式引入xadmin源码。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808002305205-479428038.png" alt=""></p> <p>  3 ) settings.py中添加应用</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #008080;"> 1</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 将extra_apps的添加至python项目的搜索目录</span> <span style="color: #008080;"> 2</span> sys.path.insert(0, os.path.join(BASE_DIR, <span style="color: #800000;">'</span><span style="color: #800000;">extra_apps</span><span style="color: #800000;">'</span><span style="color: #000000;">)) </span><span style="color: #008080;"> 3</span> <span style="color: #008080;"> 4</span> INSTALLED_APPS =<span style="color: #000000;"> [ </span><span style="color: #008080;"> 5</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.admin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 6</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 7</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.contenttypes</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 9</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">10</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.staticfiles</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">11</span> <span style="color: #800000;">'</span><span style="color: #800000;">xadmin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">12</span> <span style="color: #800000;">'</span><span style="color: #800000;">crispy_forms</span><span style="color: #800000;">'</span><span style="color: #000000;">, // 相关依赖 </span><span style="color: #008080;">13</span> <span style="color: #800000;">'</span><span style="color: #800000;">reversion</span><span style="color: #800000;">'    // 相关依赖</span> <span style="color: #008080;">14</span> ]</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>  4 ) urls.py中添加路由</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #008080;">1</span> <span style="color: #0000ff;">from</span> django.contrib <span style="color: #0000ff;">import</span> admin //<span style="color: #000000;"> 原来模板模块 </span><span style="color: #008080;">2</span> <span style="color: #0000ff;">from</span> django.urls <span style="color: #0000ff;">import</span><span style="color: #000000;"> path </span><span style="color: #008080;">3</span> <span style="color: #0000ff;">import</span> xadmin //<span style="color: #000000;"> 导入xadmin模块 </span><span style="color: #008080;">4</span> <span style="color: #008080;">5</span> urlpatterns =<span style="color: #000000;"> [ </span><span style="color: #008080;">6</span> <span style="color: #008000;">#</span><span style="color: #008000;"> path('admin/', admin.site.urls),</span> <span style="color: #008080;">7</span> path(<span style="color: #800000;">'</span><span style="color: #800000;">xadmin/</span><span style="color: #800000;">'</span>, xadmin.site.urls), //<span style="color: #000000;"> 修改路由 </span><span style="color: #008080;">8</span> ] </pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp; &nbsp; &nbsp; 5 )&nbsp;此时运行项目是没法打开后台登陆页的。&nbsp;还须要进行数据迁移建立相应的表</p> <p>   工具栏运行: Tool -&gt; Run manage.py task -&gt;&nbsp;</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808003703961-1335236146.png" alt=""></p> <p>&nbsp; &nbsp; &nbsp; &nbsp;该错误有可能发生,缘由是数据库保存索引字段作大限制,&nbsp;本例是由于已经建立多个数据表,总和超过了1000致使报错,解决办法是分别将每一个应用的模型作数据迁移。避免一次性超过限制大小而报错。固然,在后面使用正确顺序操做时也能够解决。</p> <p> &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808004041155-384522079.png" alt=""></p> <p>&nbsp;</p> <p>  此时浏览器运行 localhost:8000/xadmin/ 报错以下:该错误是因为以上错误中断了django_session数据表的建立。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808001934622-808716733.png" alt=""></p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808001901647-975441362.png" alt=""></p> <p>&nbsp; &nbsp; &nbsp;&nbsp;</p> <p>3、从新进行数据迁移操做(避免出现以上错误: django.db.utils.InternalError: (1071)&nbsp;和 django_session)</p> <p>  1 )&nbsp;将以前 setings.py和urls.py 添加的代码先注释 ,&nbsp;同时将数据库(MySQL)中对应的数据表删除</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #008080;"> 1</span> INSTALLED_APPS =<span style="color: #000000;"> [ </span><span style="color: #008080;"> 2</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.admin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 3</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 4</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.contenttypes</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 5</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 6</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 7</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.staticfiles</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'xadmin',</span> <span style="color: #008080;"> 9</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'crispy_forms',</span> <span style="color: #008080;">10</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'reversion'</span> <span style="color: #008080;">11</span> ]</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #0000ff;">from</span> django.contrib <span style="color: #0000ff;">import</span><span style="color: #000000;"> admin </span><span style="color: #0000ff;">from</span> django.urls <span style="color: #0000ff;">import</span><span style="color: #000000;"> path </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> xadmingit

urlpatterns </span>=<span style="color: #000000;"> [ path(</span><span style="color: #800000;">'</span><span style="color: #800000;">admin/</span><span style="color: #800000;">'</span><span style="color: #000000;">, admin.site.urls), </span><span style="color: #008000;">#</span><span style="color: #008000;"> path('xadmin/', xadmin.site.urls),</span> ]</pre>github

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>  2 )&nbsp;暂时使用官方的后台模板,建立数据迁移表并生成数据,&nbsp;此时是官方配置,故无兼容性问题,在数据库中也生成对应的数据表。</p> <p>    <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808005732861-682360765.png" alt=""></p> <p>    建立管理员帐号 createsuperuser,&nbsp;按提示输入帐号密码便可,&nbsp;而后再浏览器访问后台 localhost:8000/admin&nbsp; &nbsp;登陆便可。</p> <p>    <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808010006482-645058047.png" alt=""></p> <p>    <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808010358775-1118836361.png" alt=""></p> <p>   此时查看数据库能够看到有django_session数据表</p> <p>&nbsp; <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808010506827-798245831.png" alt=""></p> <p>  两段代码中可看到</p> <pre>'django.contrib.sessions.middleware.SessionMiddleware'<span>,</span></pre> <pre>'django.contrib.sessions'<span>,</span><br>默认配置中使用session做为后台数据存储 ,故django_session数据表也是必须的,不然报错。</pre> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #008080;"> 1</span> MIDDLEWARE =<span style="color: #000000;"> [ </span><span style="color: #008080;"> 2</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.security.SecurityMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 3</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions.middleware.SessionMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 4</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.common.CommonMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 5</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.csrf.CsrfViewMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 6</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth.middleware.AuthenticationMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 7</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages.middleware.MessageMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.clickjacking.XFrameOptionsMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">] </span><span style="color: #008080;">10</span> <span style="color: #008080;">11</span> INSTALLED_APPS =<span style="color: #000000;"> [ </span><span style="color: #008080;">12</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.admin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">13</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">14</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.contenttypes</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">15</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">16</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">17</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.staticfiles</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">18</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'xadmin',</span> <span style="color: #008080;">19</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'crispy_forms',</span> <span style="color: #008080;">20</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'reversion'</span> <span style="color: #008080;">21</span> ]</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p> <p>  3 )&nbsp;去掉以前对xadmin相关配置的注释 ,&nbsp;此时浏览器访问 localhost:8000/xadmin/ 没法登陆后台,&nbsp;提示相关表不存在,须要进行数据迁移操做生成数据表。</p> <p>    但切记,不可删除以前生成的数据表,不然将出现没法建立django_session表的状况 ,&nbsp;而且若是以后须要添加数据表,尽可能不要批量进行数据迁移操做,&nbsp;而是分开单个应用进行数据迁移操做。</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011045254-1215852194.png" alt=""></p> <p>&nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011111168-1677596782.png" alt=""></p> <p>  打开manage.py命令,&nbsp;建立成功,&nbsp;在数据库中可查看到xadmin_前缀的数据表。</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011437246-1869665181.png" alt=""></p> <p>  此时重启项目并浏览器登陆后台localhost:8000/xadmin ,&nbsp;输入帐号密码,&nbsp;大功告成...</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011638671-1646092181.png" alt=""></p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011708864-519226482.png" alt=""></p> <p>&nbsp;</p> <p>&nbsp;4、后台显示数据表</p> <p>  在应用中建立 adminx.py,&nbsp;必须是adminx.py,&nbsp;代替了原来的 admin.py</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;前提是已经设计好UserProfie模型。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> xadmin </span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">from</span> .models <span style="color: #0000ff;">import</span><span style="color: #000000;"> UserProfile, Comments </span><span style="color: #008080;"> 3</span> <span style="color: #008080;"> 4</span> <span style="color: #008080;"> 5</span> <span style="color: #008000;">#</span><span style="color: #008000;"> Register your models here.</span> <span style="color: #008080;"> 6</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UserProfileAdmin(object): </span><span style="color: #008080;"> 7</span> list_display = [<span style="color: #800000;">'</span><span style="color: #800000;">username</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">password</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #800000;">'</span><span style="color: #800000;">email</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">nick_name</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">birth_date</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">gender</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">telephone</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 9</span> <span style="color: #800000;">'</span><span style="color: #800000;">address</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">avatar</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">date_joined</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">10</span> search_fields = [<span style="color: #800000;">'</span><span style="color: #800000;">nick_name</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">11</span> list_filter = [<span style="color: #800000;">'</span><span style="color: #800000;">gender</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">12</span> <span style="color: #008080;">13</span> <span style="color: #008080;">14</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> CommentsAdmin(object): </span><span style="color: #008080;">15</span> list_display = [<span style="color: #800000;">'</span><span style="color: #800000;">title</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'content</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">type</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">add_time</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">16</span> search_fields = [<span style="color: #800000;">'</span><span style="color: #800000;">title</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">17</span> list_filter = [<span style="color: #800000;">'</span><span style="color: #800000;">type</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">18</span> <span style="color: #008080;">19</span> <br><span style="color: #008080;">20</span> <br><span style="color: #008080;">21</span> <span style="color: #000000;">xadmin.site.register(UserProfile, UserProfileAdmin) </span><span style="color: #008080;">22</span> xadmin.site.register(Comments, CommentsAdmin)</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p> <p>&nbsp;再次访问,报错以下。&nbsp;须要先注销 UserProfile后再次注册 ,修改代码以下</p> <div class="cnblogs_code"> <pre><span style="color: #008080;">1</span> <span style="color: #000000;">xadmin.site.unregister(UserProfile) </span><span style="color: #008080;">2</span> xadmin.site.register(UserProfile, UserProfileAdmin)</pre> </div> <p>&nbsp;</p> <p>&nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808015125329-1032086542.png" alt=""></p> <p>重启项目,访问后台以下,&nbsp;大功告成....</p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808014947500-325635752.png" alt=""></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>另外可能出现的错误:</p> <pre>1. ImportError: cannot import name 'login' : 出现这个错误应该是一开始就安装了django2.1, 该版本还不能彻底兼容xadmin2.0, 解决方法是降级为django2.0版本<br>2. 1146, "Table 'mtapp.xadmin_usersettings' doesn't exist" : 出现该错误是由于尚未进行数据迁移操做</pre> </div>m/images/copycode.gif" alt="复制代码"></a></span></div></div> <p><span style="font-size: 18pt;">最后在数据库迁移</span></p> <p>&nbsp;</p> </div>数据库

相关文章
相关标签/搜索