![](/img/trans.png)
[英]django modelmultiplechoicefield and widget checkboxselectmultiple
[英]Django ModelMultipleChoiceField
我是 Django 的新手,正在制作我的第一個真正的應用程序。 在使用三個相關的 model 多選字段或其他類似界面構建頁面時,我需要一些建議。 目標是構建一個頁面,用戶可以在其中從三級文件夾結構中選擇目標文件夾,並將用戶選擇保存在數據庫中以供進一步使用。 要求之一是分別選擇 L1、L2 和 L3 目錄。 我想創建三個列表,每個列表包含 L1、L2 和 L3 目錄名稱,用戶可以在其中選擇任何可用的目錄。 如果用戶更改 L1 目錄列表上的選擇,則需要自動更新 L2 目錄列表,L3 目錄列表中的 L2 目錄列表中的規則相同。 由於安全限制,我無法使用來自 Django 服務器的目錄訪問文件系統。 但它可以從用戶 PC 訪問。 我決定手動加載 dirs 結構,因為它很少改變。
問題是如何將這些列表嵌入頁面並使它們依賴。 我猜它必須是三個 model 多項選擇字段和一些 JavaScript 事件來更新它們。 但我需要示例如何構建它。 可能有另一種比使用 ModelMultipleChoiceField 更好的方法......
目錄示例 - 樹結構:
|-L1_Dir#1 -|-L2_Dir#A-|-L3_Dir#P
| | |-L3_Dir#Q
| |
| |-L2_Dir#B-|-L3_Dir#R
| |-L3_Dir#S
|
|-L1_Dir#2 -|-L2_Dir#C-|-L3_Dir#T
|-L3_Dir#U
我創建了一個 models.py 結構:
from django.db import models
# Create your models here.
class L1_dir(models.Model):
name = models.CharField(max_length = 48)
def __str__(self):
return(self.name)
class L2_dir(models.Model):
name = models.CharField(max_length = 48)
l1_dir = models.ForeignKey(L1_dir, on_delete = models.CASCADE)
def __str__(self):
return(self.name)
class L3_dir(models.Model):
path = models.CharField(max_length = 256) #store full path here
name = models.CharField(max_length = 48)
l2_dir = models.ForeignKey(L2_dir, on_delete = models.CASCADE)
def __str__(self):
return(self.dir_name)
您可以使用一個 model 來處理這種情況。
class LocationDir(models.Model):
path = models.CharField(max_length = 256)
name = models.CharField(max_length = 48)
directory = models.ForeignKey('self', on_delete = models.CASCADE, null=True, blank=True)
def __str__(self):
return self.name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.