过滤django-admin

时间:2017-10-19 15:17:45

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

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

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提供的默认表单添加时,在选择字段 Foo 中,所有 Foos (均为选项A和选项B)可供选择。我想过滤选项,只提供选项A Foos

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

3 个答案:

答案 0 :(得分:1)

查看limit_choices_to

修改

从doc:

中考虑这个例子
staff_member = models.ForeignKey(
    User,
    on_delete=models.CASCADE,
    limit_choices_to={'is_staff': True},
)
  

导致ModelForm上的相应字段仅列出用户   有is_staff = True。这在Django管理员中可能会有所帮助。

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

答案 1 :(得分:1)

limit_choices_to有多个条件:

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

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

答案 2 :(得分:0)

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

from django.db.models import Q

limit_to = Q(username="stack") & Q(is_staff=True) & Q(is_active=True)