如何使用约束限制外键下拉列表?
Posted
技术标签:
【中文标题】如何使用约束限制外键下拉列表?【英文标题】:how to limit the foreignkey dropdown with constraints? 【发布时间】:2011-03-05 02:38:05 【问题描述】:我有一个数据库,用于跟踪两个不同团队之间的交互(在管理界面中由两个不同的组表示)。对于某些字段,我有一个用户数据库的外键,我想将下拉人员限制为仅特定组。
如果有人有任何建议,将不胜感激!
【问题讨论】:
【参考方案1】:您可以更改表单字段的底层查询集:How do I filter ForeignKey choices in a Django ModelForm?
【讨论】:
似乎说应该在视图中完成,但我不确定如何访问视图,我唯一可以访问的是模型类和模型管理类。任何特定的方向性建议将不胜感激! 您应该使用自定义表单并在表单的__init__
中执行此操作! def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.fields["user"].queryset = User.objects.filter(...) 【参考方案2】:
要覆盖 Django 管理应用程序中外键字段的选择,请编写 formfield_for_foreignkey
方法。
【讨论】:
另一种选择,以防选择取决于模型实例:***.com/a/949290【参考方案3】:您正在寻找limit_choices_to
。
【讨论】:
您好,感谢您的回答!但是,我认为用户组关系位于 django admin 中的不同表上,在这种情况下我将如何过滤? 带有Q
对象。 Q(group__icontains=u'user')
嘿伊格纳西奥,我仍然对如何做到这一点感到困惑。在进一步挖掘 auth 模块的代码后,我发现组在 User 类中定义如下:groups = models.ManyToManyField(Group, verbose_name=_('groups'), blank=True,)。该查询基于用户,所以我想检查当前有问题的用户是否在“合法”组中。请注意,Group 模型有一个 ID,因此名称不直接存储在 User 中。非常感谢您的帮助!
ForeignKey(User, limit_choices_to='groups__name': u'Legal', ...)
如果我希望它不是基于常量而是基于另一个模型字段进行过滤怎么办?含义:如果我想访问这个 Q 对象中的“自我”怎么办?以上是关于如何使用约束限制外键下拉列表?的主要内容,如果未能解决你的问题,请参考以下文章
(Django)如何在更改外键下拉列表后使“选定”选项有效?
如何解决无法添加或更新子行:Spring JPA 中的外键约束失败错误?