簡體   English   中英

Django 模型MultipleChoiceField

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM