【问题标题】:Filtering select field options in django-admin在 django-admin 中过滤选择字段选项
【发布时间】:2018-03-31 16:38:50
【问题描述】:

我在我的一个基于 django-admin 的项目中使用django-xadmin。我需要帮助。假设,我有两个这样的模型 -

class Foo(models.Model):
    CHOICES = (
        ('a', 'Option A'),
        ('b', 'Option B')
    )
    status = models.CharField(max_length=10, choices=CHOICES)

class Bar(models.Model):
    foo = models.ForeignKey(Foo)
    remarks = models.CharField(max_length=200)

在 xadmin 中,当我尝试通过 xadmin 提供的默认表单添加 Bar 时,在选择字段 Foo 中,所有 Foos(两者选项 A 和选项 B) 可供选择。我想过滤选项,只提供选项AFoos

我该怎么做? xadmin 中是否有任何方法,我应该调用或自定义来实现它?

【问题讨论】:

    标签: django django-models django-forms django-admin django-admin-filters


    【解决方案1】:

    看看limit_choices_to

    编辑

    考虑文档中的这个例子:

    staff_member = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        limit_choices_to={'is_staff': True},
    )
    

    使 ModelForm 上的相应字段仅列出用户 有 is_staff=True。这可能对 Django 管理员有所帮助。

    因此,这是一种在相应字段上添加限制的简单方法。

    【讨论】:

    • 谢谢。让我试试。但是你应该在你的答案中添加一些解释,而不仅仅是一个链接。
    • 如果你需要的话我可以,但我不想重复。在这种情况下,文档非常清楚。告诉我进展如何。
    • 我的问题解决了。但是您可以添加一些描述,即使在文档中很清楚。这对每个人都有好处。
    • 更新答案。
    • 另外,如果我是你,我会将问题的标题更改为更类似于 Filtering select field options in django admin 的内容,因为它可以适用于更一般的情况。我的答案不仅适用于使用您的包裹的人。无论如何,这只是一个提议。
    【解决方案2】:

    limit_choices_to 有多个条件:

    staff_member = models.ForeignKey(
    User,
    on_delete=models.CASCADE,
    limit_choices_to={'is_staff': True,is_superuser':False},)
    

    我们可以在模型中添加多个限制选择选项..

    【讨论】:

    • 我在阅读文档后已经应用了多个条件。但再次感谢。
    【解决方案3】:

    带有Q对象的多个字段的限制选择过滤器:

    from django.db.models import Q
    
    limit_to = Q(username="stack") & Q(is_staff=True) & Q(is_active=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 2010-10-15
      • 2013-10-20
      • 2021-01-07
      • 2011-03-14
      • 2010-10-22
      • 2018-12-13
      • 2015-07-11
      相关资源
      最近更新 更多