模特:
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的表单。
我想减少两者 - 父亲应该包含男性,母亲 - 女性。但是怎么做呢?
答案 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')