有没有一种简单的方法可以在django的管理站点中过滤mulitfield?

时间:2016-10-28 16:01:54

标签: django django-admin

模特:

class Person(Model):
  (...)
   fathers = models.ManyToManyField('Person', related_name="fathers_children",  blank=True)
   mothers = models.ManyToManyField('Person', related_name="fathers_children",  blank=True)
   sex = models.CharField(null=True, blank=True, max_length=1)

admin.py:

class PersonAdmin(admin.ModelAdmin):
  form = PersonAdminForm
  model = Person

  fields = ('last_name', 'birth_date','fathers','mothers')
  ordering = ['last_name','birth_date']

admin.site.register(Person, PersonAdmin)

(也许我减少了很多,但我认为这是自我描述的)

请不要认为为什么一个人可以有一个以上的父亲/母亲 - 这是故意的。

现在,当我进入例如/ admin / person / 836时,获得了包含两个包含完整人员列表的MultipleChoiceField的表单。

我想减少两者 - 父亲应该包含男性,母亲 - 女性。但是怎么做呢?

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖init类中的PersonAdminForm方法来限制这些字段的查询集:

class PersonAdminForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(PersonAdminForm, self).__init__(*args, **kwargs)
        self.fields['fathers'].queryset = Person.objects.filter(sex='m')
        self.fields['mothers'].queryset = Person.objects.filter(sex='f')