如何自定义多对多字段的django admin搜索结果
How to customize django admin search results in many to many fields
当我在多对多领域使用 lupe 时,我试图过滤显示的列表(下图)。
也许文本搜索也很有趣。
有什么帮助吗?
代码如下:
class PresentialModuleCourseInline(NestedStackedInline):
"""Module Course Presential Stacked Inline"""
model = Course.modules.through
raw_id_fields = ('module_course',)
extra = 1
def get_queryset(self, request):
return self.model.objects.filter(
module_course__type_course=ModuleCourse.PRESENTIAL) # Doesn't work
self.model
不是QuerySet
也不是模型,直接使用模型:
class PresentialModuleCourseInline(NestedStackedInline):
model = Course.modules.through
raw_id_fields = ('module_course',)
extra = 1
def get_queryset(self, request):
return Course.objects.filter(module_course__type_course=ModuleCourse.PRESENTIAL)
为您的 CourseAdmin
设置 search_fields
搜索:
class CourseAdmin(admin.ModelAdmin):
search_fields = ('title',) # your search fields here
要在 ForeignKeyRawIdWidget
(lupe) 中创建过滤器,您需要添加一个 limit_choices_to 小部件,它会添加一个查询参数以在弹出页面中进行过滤,例如 ?type_course=online
样本:
class PresentialModuleCourseInline(NestedStackedInline):
"""Module Course Presential Stacked Inline"""
model = Course.modules.through
extra = 1
raw_id_fields = ('module_course', )
def get_formset(self, request, obj=None, **kwargs):
form = super().get_formset(request, obj, **kwargs)
field = form.form.base_fields['module_course']
field.widget.rel.limit_choices_to =\
{'type_course': ModuleCourse.PRESENTIAL}
return form
当我在多对多领域使用 lupe 时,我试图过滤显示的列表(下图)。 也许文本搜索也很有趣。
有什么帮助吗?
代码如下:
class PresentialModuleCourseInline(NestedStackedInline):
"""Module Course Presential Stacked Inline"""
model = Course.modules.through
raw_id_fields = ('module_course',)
extra = 1
def get_queryset(self, request):
return self.model.objects.filter(
module_course__type_course=ModuleCourse.PRESENTIAL) # Doesn't work
self.model
不是QuerySet
也不是模型,直接使用模型:
class PresentialModuleCourseInline(NestedStackedInline):
model = Course.modules.through
raw_id_fields = ('module_course',)
extra = 1
def get_queryset(self, request):
return Course.objects.filter(module_course__type_course=ModuleCourse.PRESENTIAL)
为您的 CourseAdmin
设置 search_fields
搜索:
class CourseAdmin(admin.ModelAdmin):
search_fields = ('title',) # your search fields here
要在 ForeignKeyRawIdWidget
(lupe) 中创建过滤器,您需要添加一个 limit_choices_to 小部件,它会添加一个查询参数以在弹出页面中进行过滤,例如 ?type_course=online
样本:
class PresentialModuleCourseInline(NestedStackedInline):
"""Module Course Presential Stacked Inline"""
model = Course.modules.through
extra = 1
raw_id_fields = ('module_course', )
def get_formset(self, request, obj=None, **kwargs):
form = super().get_formset(request, obj, **kwargs)
field = form.form.base_fields['module_course']
field.widget.rel.limit_choices_to =\
{'type_course': ModuleCourse.PRESENTIAL}
return form