1、項目需求
系統學習django之搭建後臺管理系統
2、項目初始化
django項目的搭建在前面已經寫過,所以這裏直接同搭建後臺管理系統開始。
這裏的django版本是2.0。
- 1、下載xadmin
在github上下載源碼包。解壓複製xadmin文件夾到Django項目的自建包extra_apps中。
因爲我們用源碼的xadmin,所以要卸載之前安裝的
pip uninstall xadmin
- 2、配置setting.py
將extra_apps包加入到python的搜尋環境
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
- 3、配置xadmin apps
在settings.py中的INSTALLED_APPS添加’xadmin’,‘crispy_forms’ - 4、配置urls
在urls.py中 添加
配置url
import xadmin
urlpatterns = [url('xadmin/', xadmin.site.urls),]
- 5、數據遷移
Python manage.py makemigrations
Python manage.py migrate
- 6、設置成中文
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
- 7、創建一個管理員用戶
python manage.py createsuperuser
訪問後臺:http://127.0.0.1:8000/xadmin即可
如圖所示
執行後應該會報錯,這是因爲python版本和django的版本導致的,借鑑了網上整理的錯誤。
- 8、錯誤整理
error | methods |
---|---|
關聯關係ForeignKey引發的錯誤,打開xadmin文件中的模型文件models.py | 添加 on_delete=models.CASCADE |
No module named ‘django.core.urlresolvers’ | django.core.urlresolvers修改成django.urls |
__init__takes one positional argument but 6 were given | 更改爲forms.Field.init(self) |
cannot import name ‘QUERY_TERMS’ from ‘django.db.models.sql.query’ | from django.db.models.sql.query import LOOKUP_SEP 。。。 from django.db.models.sql.constants import QUERY_TERMS |
No module named ‘django.contrib.formtools’ | 卸載舊版本pip uninstall django-formtools再安裝 |
‘Settings’ object has no attribute ‘MIDDLEWARE_CLASSES’ | 修改爲if settings.LANGUAGES and ‘django.middleware.locale.LocaleMiddleware’ in settings.MIDDLEWARE: |
login() got an unexpected keyword argument 'current_app’錯誤 | 註釋61行 #‘current_app’: self.admin_site.name |
‘Media’ object has no attribute ‘add_css’ | 將util.py 中的86行 def vendor(*tags):方法體修改 |
‘DateTimeField’ object has no attribute ‘rel’ | 將rel改爲remote_field ()注:凡是報異常rel的地方都可以嘗試將報錯方法中的.rel 修改爲.remote_field) |
‘ManyToOneRel’ object has no attribute ‘to’ | self.add_url, (_(‘Create New %s’) % self.rel.to.meta.verbose_name), name,修改爲self.add_url, ((‘Create New %s’) % self.rel), name |
最後運行:python manage.py makemigrations 創建遷移數據文件
再運行:python manage.py migrate 遷移數據庫
- 9 、在app中添加adminx.py管理
models.py
class Course(models.Model):
name = models.CharField("課程名",max_length=50)
class Meta:
verbose_name = "課程"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
adminx.py
class CourseAdmin(object):
'''課程'''
list_display = [ 'name'] #TODO 展示
search_fields = ['name' ] #TODO 查詢
list_filter = [ 'name'] #TODO 過濾
# 將管理器與model進行註冊關聯
xadmin.site.register(Course, CourseAdmin)
這個時候後臺管理系統就會添加該項。