【发布时间】:2016-05-05 13:33:05
【问题描述】:
我打算在 django 中设计一个基于 Web 的数据库。在我的页面中,所有议会问题的工作都是自动化的。这里是一个表格示例:
在我的输入表单中,会有很多字段,包括 Department 和 Division 字段。根据上表,当我选择第 1 组时,所有三个部委 A、B、C 将作为下拉列表出现在部委字段下。同样,当我从下拉列表中选择部门 A 时,所有三个部门 X、Y、Z 都将位于部门下拉列表的标签下。请注意,您可能会注意到所有的事工都没有分裂。所以当一个部门没有部门时,部门字段将被隐藏。
为了实现这一点,我正在考虑以下模型:
from django.db import models
class Group(models.Model):
name = models.CharField(max_length=8, unique=True)
slug = models.SlugField(max_length=8, unique=True,
help_text='A label for URL config.')
class Ministry(models.Model):
name = models.CharField(max_length=90, unique=True)
slug = models.SlugField(max_length=90, unique=True,
help_text='A label for URL config.')
group = models.ForeignKey(Group)
class Division(models.Model):
name = models.CharField(max_length=90, unique=True)
slug = models.SlugField(max_length=90, unique=True,
help_text='A label for URL config.')
ministry = models.ForeignKey(Ministry)
我的方法是正确的吗?欢迎提出任何改进建议。
编辑:
django-mptt 模型:
from django.db import models
from mptt.models import MPTTModel, TreeForeignKey
from django.core.urlresolvers import reverse
class Genre(MPTTModel):
name = models.CharField(max_length=50, unique=True)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
def get_absolute_url(self):
return reverse('genre_detail', kwargs={'pk': self.pk,})
class MPTTMeta:
order_insertion_by = ['name']
def __str__(self):
return self.name
django-mptt 输出:
Group-1
Ministry A
Division A
Division B
Division C
Ministry B
Ministry C
Division D
Division E
Ministry D
Group-2
Ministry E
Division G
Division Z
Ministry F
Division I
Division J
但是如何使这棵树成为我的示例表?
【问题讨论】:
-
我的看法是,如果不会超过这3个级别就可以了。如果这个层次结构可以增长,我会使用嵌套模型之类的东西。 en.wikipedia.org/wiki/Nested_set_model
-
@Milos Miletic,将有 10 个级别,每个级别将分配给特定日期。这将在议会会议期间、近 20 个工作日或工作日期间循环持续。我浏览了您的链接页面,但无法理解它是如何在 django 中实现的。能给点提示吗?
标签: django python-3.x django-models django-forms