我在Django管理员中有许多不同的过滤器:
class OrderAdmin(admin.ModelAdmin):
...
list_filter = ('field_1', 'field_2', 'field_3', ... , 'field_N')
...
Run Code Online (Sandbox Code Playgroud)
在调用changelist_viewparent之前,我需要在我的重写方法中获取过滤的查询集changelist_view:
class OrderAdmin(admin.ModelAdmin):
...
def changelist_view(self, request, extra_content=None):
# here i need filtered queryset and I don`t know
# which filters have been applied
return super().changelist_view(request, extra_context)
...
Run Code Online (Sandbox Code Playgroud)
如果我打电话get_queryset之前,super在changelist_view它返回的查询集不带过滤器.
我使用GET方法设置了Django表单.每个值对应于Django模型的属性.什么是生成查询的最优雅方式?目前这是我在视图中所做的:
def search_items(request):
if 'search_name' in request.GET:
query_attributes = {}
query_attributes['color'] = request.GET.get('color', '')
if not query_attributes['color']: del query_attributes['color']
query_attributes['shape'] = request.GET.get('shape', '')
if not query_attributes['shape']: del query_attributes['shape']
items = Items.objects.filter(**query_attributes)
Run Code Online (Sandbox Code Playgroud)
但我很确定有更好的方法可以解决这个问题.