2016-10-28 9 views
1

モデル:djangoの管理サイトでmulitfieldを簡単にフィルタリングする方法はありますか?

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と入力すると、完全な人物リストを含む2つのMultipleChoiceFieldsを持つフォームが得られます。

私は両方を減らしたいと思っています。父親は男性、母親、女性を含むべきです。しかし、それを行う方法?

答えて

1

あなたは、単にPersonAdminFormクラスでinitメソッドをオーバーライドすることで、これらのフィールドのためのクエリセットを制限することができます。

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') 
+0

感謝を!これはまさに私が必要なものです! –

関連する問題