<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 </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 或者 pip install django-xadmin</p> <p> 事實證實 Django2+xadmin2的版本是行不通的, 正確方法是經過官方的github <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可能會報以下錯誤, 說是因爲README.rst這個文件的編碼有問題,其內容也只是安裝的介紹,解決方法是</p> <p> 1)訪問xadmin 的 github下載其壓縮包zip,而後解壓</p> <p> 2 ) 直接在虛擬環境下運行 pip install <壓縮包路徑> 如:pip install xadmin.zip</p> <p> 4 ) 此時xadmin及其依賴包被下載到 虛擬環境下</p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807232914458-1396505512.png" alt=""></p> <p> </p> <p> 2. 安裝方法二:</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版本不一樣, 可自行選擇。</p> <p> 該方法能夠將xadmin和其依賴包直接安裝虛擬環境下</p> <p> 3. 安裝方法三:</p> <p> 1)一樣使用git clone 或者下載zip壓縮包的方式將源碼下載到本地</p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807235122795-1306951434.png" alt=""></p> <p> 2 ) 拿到根目錄下的xadmin, 存放在 extra_apps(自定義)目錄下,做爲第三方依賴的存放目錄</p> <p> 3 ) 將extra_apps目錄設置爲 Resource Root,右鍵 Mark Directory as -> Resource Root</p> <p>2、配置</p> <p> 不管使用哪種安裝方式, 接下配置而且migrate的順序很重要,不然可能會引起一系列的報錯, 如下先使用方法二安裝好依賴, 再使用安裝方法三引入xadmin。</p> <p> 1 ) 使用 pip list 能夠查看依賴包, 使用方法一和二安裝時自動安裝,若是直接使用方法三安裝依賴參考github,但比較麻煩。</p> <p> 2 ) 此處是使用 pip install git+git://github.com/sshwsfc/xadmin.git@django2, 能夠同時安裝依賴包, 而後將虛擬環境下的xadmin卸載 pip uninstall xadmin , 再使用方法三extra_apps方式引入xadmin源碼。</p> <p> <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> 5 ) 此時運行項目是沒法打開後臺登陸頁的。 還須要進行數據遷移建立相應的表</p> <p> 工具欄運行: Tool -> Run manage.py task -> </p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808003703961-1335236146.png" alt=""></p> <p> 該錯誤有可能發生,緣由是數據庫保存索引字段作大限制, 本例是由於已經建立多個數據表,總和超過了1000致使報錯,解決辦法是分別將每一個應用的模型作數據遷移。避免一次性超過限制大小而報錯。固然,在後面使用正確順序操做時也能夠解決。</p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808004041155-384522079.png" alt=""></p> <p> </p> <p> 此時瀏覽器運行 localhost:8000/xadmin/ 報錯以下:該錯誤是因爲以上錯誤中斷了django_session數據表的建立。</p> <p> <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> </p> <p>3、從新進行數據遷移操做(避免出現以上錯誤: django.db.utils.InternalError: (1071) 和 django_session)</p> <p> 1 ) 將以前 setings.py和urls.py 添加的代碼先註釋 , 同時將數據庫(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 ) 暫時使用官方的後臺模板,建立數據遷移表並生成數據, 此時是官方配置,故無兼容性問題,在數據庫中也生成對應的數據表。</p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808005732861-682360765.png" alt=""></p> <p> 建立管理員帳號 createsuperuser, 按提示輸入帳號密碼便可, 而後再瀏覽器訪問後臺 localhost:8000/admin 登陸便可。</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> <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> </p> <p> 3 ) 去掉以前對xadmin相關配置的註釋 , 此時瀏覽器訪問 localhost:8000/xadmin/ 沒法登陸後臺, 提示相關表不存在,須要進行數據遷移操做生成數據表。</p> <p> 但切記,不可刪除以前生成的數據表,不然將出現沒法建立django_session表的狀況 , 而且若是以後須要添加數據表,儘可能不要批量進行數據遷移操做, 而是分開單個應用進行數據遷移操做。</p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011045254-1215852194.png" alt=""></p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011111168-1677596782.png" alt=""></p> <p> 打開manage.py命令, 建立成功, 在數據庫中可查看到xadmin_前綴的數據表。</p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011437246-1869665181.png" alt=""></p> <p> 此時重啓項目並瀏覽器登陸後臺localhost:8000/xadmin , 輸入帳號密碼, 大功告成...</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> </p> <p> 4、後臺顯示數據表</p> <p> 在應用中建立 adminx.py, 必須是adminx.py, 代替了原來的 admin.py</p> <p> 前提是已經設計好UserProfie模型。</p> <p> </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> </p> <p> 再次訪問,報錯以下。 須要先註銷 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> </p> <p> <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808015125329-1032086542.png" alt=""></p> <p>重啓項目,訪問後臺以下, 大功告成....</p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808014947500-325635752.png" alt=""></p> <p> </p> <p> </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> </p> </div>數據庫