【发布时间】:2010-09-28 21:41:50
【问题描述】:
我正在使用 Django 编写博客应用程序,并且正在尝试实现分层类别结构。每个类别都有一个“父”外键,指向同一个类别模型。我想允许管理员添加类别,并且我希望界面允许他们选择类别的父类别。但是,我想避免 Im-my-own-grandpa 的情况,因此我想将可用的类别选择限制为那些没有问题的类别作为祖先的类别。
现在,我正在从视图中控制它:
parent_candidates = list(Category.objects.all())
pruned_parent_list = [cat for cat in parent_candidates if instance.id not in cat.getHierarchy()]
instance 是正在编辑的类别,getHierarchy() 是获取祖先 ID 列表的方法。
这种方法存在许多问题。特别是,它使用一个额外的数据库命中来获取所有类别的列表,它使我可以通过循环 pruned_parent_list 来将选择机制写入我的模板以获取选项,而我真的只想指定一个小部件。
有没有更好的方法来做到这一点?我知道我可以在后端添加自定义验证来防止这种情况,但为什么要让用户选择呢?
【问题讨论】:
标签: python django django-forms