如何以Django形式显示过滤的选择列表

时间:2019-11-29 07:48:09

标签: django django-admin

我的问题是:我有一个可以选择参加会议的人的列表。不活动的帐户不应显示在该列表中。我想将这些帐户从可能的用户列表中过滤掉

这是现在的代码:

class StudioMeetingNoteAdmin(admin.ModelAdmin):
    fields = ('this_is_test',)
    fieldsets = [
        ('Tijden', {'fields': ['meeting_start_time', 'meeting_end_time']}),
        ('Wie is de voorzitter/notulist', {'fields': [('chairman', 'secretary')]}),
        ('Opkomst', {'fields': [('attending_persons', 'absent_persons')]}),
    ]
    inlines = [OpeningAndParticularitiesInline, ActionListPointInline, RemarksPriorMeetingInline, IssuesToAddressInline, OurNextMoveInline, QuestionRoundInline]
    list_filter = ['meeting_start_time']
    search_fields = ['meeting_start_time']
    list_display = ('meeting_start_time', 'chairman', 'secretary')

字段attending_persons应该被过滤,因此不应该显示非活动的用户帐户。 我尝试用下面链接中显示的方法替换“ attending_persons”,但这会导致错误。

https://docs.djangoproject.com/en/1.10/ref/contrib/admin/

class AuthorAdmin(admin.ModelAdmin):
    fields = ('name', 'title', 'view_birth_date')

    def view_birth_date(self, obj):
        return obj.birth_date

    view_birth_date.empty_value_display = '???'

您无法使用fieldset

所以我的问题是:如何显示过滤列表以供选择?

谢谢

1 个答案:

答案 0 :(得分:0)

您应该覆盖get_form方法:

class StudioMeetingNoteAdmin(admin.ModelAdmin):
    # same as above ...

    def get_form(self, request, obj=None, **kwargs):
        form = super(StudioMeetingNoteAdmin, self).get_form(request, obj, **kwargs)
        form.base_fields['attending_persons'].queryset = User.objects.filter(active=True)
        return form

docs中所述:

  

fields选项接受与list_display相同类型的值,除了不接受 可调用对象 。模型和模型管理方法的名称仅在列在readonly_fields中的情况下使用。

这是针对ModelAdmin.fields的,但是相同的规则将适用于ModelAdmin.fieldsets