django - Dhango 1.11 如何过滤一个过滤器的内容?
问题描述
Django 1.11 Python 3.6
我有两个模型,一个是使用另一个模型列表的下拉过滤器,并且一切正常:
models.py
class Office(models.Manager):
...code....
class Customer(models.Manager):
...code....
office = models.ForeignKey(Office, blank=False, null=False)
...code....
admin.py
class CustomerAdmin( admin.ModelAdmin):
list_filter = ["office", "<some_other_filter>"]
就像我想要的那样,我在客户视图中获得了一个包含办公室列表的下拉列表,一切正常。
现在,无论出于何种原因,我想在客户视图上过滤“办公室”过滤器的内容,例如从该下拉列表中删除一些条目,但仅用于过滤器 - 办公室视图数据应该保持不变,即完整列表。覆盖get_queryset
并class Office
没有这样做,实际上,它与我需要的相反 - 它只过滤输入视图的数据,而不是过滤器中的条目列表。在 Django 1.11 中过滤过滤器是否有干净简单的方法?
解决方案
回答我自己的问题......这是我得到我想要的东西的方式(沿着为 Django Admin 中的 list_filter 创建自定义过滤器):
in admin.py
from django.contrib.admin import SimpleListFilter
class MyCustomFilter(SimpleListFilter):
title = '<some title>'
parameter_name = '<some_entity>__id__exact'
def lookups(self, request, model_admin):
all_entries = model_admin.model.objects.all()
filtered_entries = set([<bunch of code to do the filtering>])
return set([(<dropdown_entry>.id, <dropdown_entry>.name) for entry in filtered_entries])
def queryset(self, request, queryset):
if self.value():
return queryset.filter(tss_id=self.value())
return queryset.all()
in models.py
class CustomerAdmin( admin.ModelAdmin):
# list_filter = ["office", "<some_other_filter>"]
list_filter = [MyCustomFilter, "<some_other_filter>"]
推荐阅读
- python - 不知道为什么这个功能不起作用?
- c# - 像线渲染Unity3d一样创建网格
- javascript - 使用流利的 ffmpeg 覆盖视频时丢失音频
- python - 如何通过另一个选项卡中的按钮更改选项卡?- KivyMD
- node.js - Cookie 在我使用 Postman 时有效,但在浏览器中不显示
- c++ - 如何用前导零填充 IP 地址
- entity-framework - 在 linq 查询中向 Include 表添加条件
- r - 从函数返回反应值时,值似乎不是反应性的。(错误:无法将类型“闭包”强制转换为“字符”类型的向量)
- python - 阻止函数创建文件
- java - 根据另一个列表从列表中删除条目 - Java