在剛進公司的時候,要寫一個需求,使用django的admin站點管理,實現一個二級聯動的功能,因為要用到django自帶的頁面,因為不是自定義的,不能直接添加js代碼。根據我自己的研究簡單的記錄一下大概步驟。
項目創建流程略過,這里使用MySQL數據庫和py3為例。
示例項目大概功能,添加一個人物信息,地區通過三級聯動選擇。
一、項目創建成功后,首先寫模型類代碼:
class AreaInfo(models.Model): """地區模型類""" name = models.CharField(max_length = 50) pid = models.ForeignKey('self', related_name = 'areas',null=True, blank=True, on_delete = models.SET_NULL) def __str__(self): return self.name class Meta: db_table = 'areainfo' verbose_name = '地區信息' verbose_name_plural = verbose_name class HeroInfo(models.Model): """任務信息模型類""" name = models.CharField(max_length = 50) # on_delete 表示關聯的外鍵表刪除數據時,該條數據不變,外鍵置為空 province = models.ForeignKey(AreaInfo, null=True, blank=True, on_delete = models.SET_NULL) city = models.ForeignKey(AreaInfo, related_name = 'areainfo', null=True, blank=True, on_delete = models.SET_NULL) country = models.ForeignKey(AreaInfo, related_name = 'areainfos', null=True, blank=True, on_delete = models.SET_NULL) def __str__(self): return self.name class Meta: db_table = 'heroinfo' verbose_name = '人物信息' verbose_name_plural = verbose_name
在一個模型類中,兩個外鍵關聯同一個模型類,要使用related_name進行設置,否則會報錯。related_name 不能相同,否則遷移數據庫會出錯,反向查詢名稱重復。
然后進行數據庫遷移,在數據庫中導入地區信息,為后續使用做準備。
使用數據庫時,不要忘記在settings.py中修改數據庫配置。同時使用時,要在應用的__init__.py文件中,添加以下兩行代碼:
import pymysqlpymysql.install_as_MySQLdb
因為在MySQLdb是python連接MySQL的模塊,在py2中使用,py3中沒有MySQLdb,所以py3要安裝pymysql,并進行以上設置。
二、以上步驟完成之后進行第二部,注冊模型類
@admin.register(AreaInfo)class AreaAdmin(admin.ModelAdmin): list_display = ('name', 'pid') # 這里要使用元組或者列表@admin.register(HeroInfo)class HeroAdmin(admin.ModelAdmin): list_display = ('name', 'province', 'city', 'country') change_form_template = 'area.html'
在這里用到了change_form_template,可以自定義訪問路徑,改變django默認的路徑
三、在template中新建一個文件admin,在admin中新建一個area.html頁面,將django 中的 change_form.html內容拷貝過來。
后面寫三級聯動的js要在這里,改變django默認的路徑,讀取的也是該頁面,上面在admin中已經進行了設置。
新聞熱點
疑難解答