【问题标题】:How do i display a filtered selection list in django form如何以 django 形式显示过滤的选择列表
【发布时间】:2019-11-29 07:48:09
【问题描述】:

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

现在的代码是这样的:

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 无法做到这一点

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

谢谢

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    你应该覆盖get_formmethod:

    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

    【讨论】:

    • 你好 Pedram,当我使用 .fieldsets 尝试您的解决方案时,它会显示 `AttributeError: type object 'StudioMeetingNoteForm' has no attribute 'fieldsets' `
    • @FAM_Maurice 你应该使用.fields fieldsets(表单有字段)。
    • 好的,我将其更改为字段,但现在我收到错误 tuple indices must be integers or slices, not str。知道是什么原因造成的吗?
    • 我发现它不应该是fields,而应该是base_fields。我已使用此问题中引用的代码作为示例stackoverflow.com/questions/54777663/…,现在它可以工作了。没有更多的错误,所以我认为你应该调整你的答案@Pedram Parsian
    • 这里是另一个解释性链接stackoverflow.com/questions/2140862/… 我忘了提到我得到了一个“AttributeError:类型对象'StudioMeetingNoteForm'没有属性'fields'”错误。根据解释,当您在调用super()之前尝试使用字段时会发生这种情况@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2020-02-05
    • 1970-01-01
    • 2021-04-09
    • 2010-10-15
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多