繁体   English   中英

Django 模型中的多个嵌套选择

[英]Multiple nested choices in Django models

如果我没有正确描述这一点,请原谅我 - 我还在学习,我遇到了一个我正在解决的问题。 我想为用户创建一种方式(目前在管理后端),以按小说/非小说、年龄范围、流派和子流派显示他们喜欢的书籍。 因此,喜欢哥特恐怖书的用户可以选择小说>成人>恐怖>哥特。 或者,真正喜欢所有 YA 书籍的用户可以选择小说>青少年,他们的选择将逐级向下延伸到每个流派和子流派。

认为Choices 字段选项和 MultiSelectField 功能可能是一个开始,但似乎没有办法将“层”添加到以下类别之外的选择中,而且当可能有数百个时,这似乎是一个不雅的解决方案的选择。 我也不知道如何在管理员中显示它 - 理想情况下,带有可以“打开”以显示它们下方的子类别的复选框。

    GENRE_CHOICES = (
    ('Fiction', (
        ('FCH', 'Childrens'),
        ('FMG', 'Middle Grade'),
        ('FYA', 'Young Adult'),
        ('FAD', 'Adult'),
    )),
    ('Non-Fiction', (
        ('NCH', 'Childrens'),
        ('FMG', 'Middle Grade'),
        ('FYA', 'Young Adult'),
        ('FAD', 'Adult'),
    )),
)
genres = MultiSelectField(max_length = 100, choices=GENRE_CHOICES, null=True)

我什至不知道我在这里寻找的东西的名称,所以如果有人能指出我正确的方向,那就太好了。

如果您希望用户根据自己的喜好过滤书籍列表,请参阅 django-filter https://django-filter.readthedocs.io/en/stable/index.html
(不幸的是,我没有足够的声望来写这篇评论)

您正在寻找的是“树结构”。 您可以通过多种方式定义它,例如在数据库中实现树的方式:

class Tree(models.Model):
  parent = models.ForeignKey('self', ...)

但是有更好的方法,这在某种程度上类似于您首先要使用的方法,请参阅django-mptt TreeNodeMultipleChoiceField

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM