【问题标题】:Django Multiple Choice Form with Parent Categories带有父类别的 Django 多项选择表
【发布时间】:2011-05-29 20:22:48
【问题描述】:

我有一个看起来像这样的简单模型:

class Neighborhood(models.Model):
    name = models.CharField(max_length=255)
    borough = models.ForeignKey(Borough)

    def __unicode__(self):
        return self.name

在我的 forms.py 文件中,我有一个使用选项呈现的简单表单:

class SearchForm(forms.Form):
    neighborhood = forms.ModelMultipleChoiceField(required=False, queryset=Neighborhood.objects.all(), widget=CheckboxSelectMultiple())

这很好,并列出了我的 Neighborhood 模型中的所有选项。它看起来像这样:

  • 下东区
  • 时代广场
  • 东村
  • 西村
  • ...等

    但是,我想列出社区的父类别,在本例中为自治市镇。想要的外观是这样的:

  • 布鲁克林

    • 威廉斯堡
    • 小飞象
    • ...
  • 曼哈顿
    • 下东区
    • 时代广场
    • 西村
    • 东村
  • 皇后区
    • ...

我尝试调用这两个不同的对象并将它们组合成一个自定义列表,但是我无法通过查询集传递它,因为它给了我一个 AttributeError 没有“全部”可用。

还有其他方法吗?

【问题讨论】:

    标签: python django forms parent-child multiple-choice


    【解决方案1】:

    我认为最好的方法是为其编写自定义表单小部件。

    简单(也不错)的方法是手动在模板中输出<select> 标签。 regroup 过滤器将完成所有工作。

    【讨论】:

    • 谢谢 DrTyrsa!我最初从自定义小部件路由开始,但认为必须有一种更简单的方法。我会简单地手动输出
    【解决方案2】:

    对于未来走上同一条道路的人:

    我找到了this link,它通过创建自定义 ModelChoiceIterator(负责为选择字段生成选择元组的类)并使其包含父类别来解释如何做到这一点。

    附:作者创建了一个使用新迭代器的新 ModelChoiceField,但我相信您现在可以简单地使用 ModelChoiceField 和 ModelMultipleChoiceField 的迭代器参数设置自定义迭代器 (link to docs)

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 2011-08-10
      • 2019-02-04
      • 2016-09-24
      • 1970-01-01
      • 2017-01-27
      相关资源
      最近更新 更多