带有父类别的 Django 多项选择表

发布于 2024-11-10 05:47:50 字数 936 浏览 2 评论 0原文

我有一个如下所示的简单模型:

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 ,因为没有“全部”可用。

还有其他方法可以做到这一点吗?

I have a simple model that looks like this:

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

    def __unicode__(self):
        return self.name

In my forms.py file, I have a simple form being rendered with the options:

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

This is fine and lists out all the options in my Neighborhood model. It looks something like this:

  • Lower East Side
  • Times Square
  • East Village
  • West Village
  • ...etc

    However, I would like to list the parent category of the neighborhood, in this case the borough. The desired look would be like this:

  • Brooklyn

    • Williamsburg
    • DUMBO
    • ...
  • Manhattan
    • Lower East Side
    • Times Square
    • West Village
    • East Village
  • Queens
    • ...

I've tried to call the two different objects and combine them into a custom list, however I'm not able to pass that through the queryset as it gave me an AttributeError for not having 'all' available.

Is there another way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丶情人眼里出诗心の 2024-11-17 05:47:50

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

简单(也不错)的方法是手动在模板中输出

The best way, I think, is to write custom form widget for it.

Simple (and not bad too) way is to output <select> tag in template manually. regroup filter will do all the job.

霞映澄塘 2024-11-17 05:47:50

对于未来走同样道路的人:

我发现 此链接,其中解释了如何通过创建自定义 ModelChoiceIterator(负责为选择字段创建选择元组的类)并使其包含父类别来实现此目的。

PS 作者创建了一个使用新迭代器的新 ModelChoiceField,但我相信您现在可以使用 ModelChoiceField 和 ModelMultipleChoiceField 的迭代器参数简单地设置自定义迭代器(文档链接

For future people going down the same path:

I found this link where it explains how to do it by creating a custom ModelChoiceIterator (the class responsible for making the choices tuple for choice fields) and making it include the parent category.

P.S. The author creates a new ModelChoiceField that uses the new iterator, but I believe you can now simply set a custom iterator using the iterator argument of both ModelChoiceField and ModelMultipleChoiceField (link to docs)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文