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>"]
就像我想要的那样,我在“客户”视图上得到一个带有办公室列表的下拉列表,一切正常。
现在,无论出于何种原因,我都希望在“客户”视图上过滤“办公室”过滤器的内容,例如从该下拉列表中删除一些条目,但仅用于过滤器-Office视图数据应保持不变,即完整列表。在get_queryset
中覆盖class Office
并没有做到这一点,实际上,它的作用与我需要的相反-它仅过滤输入到视图的数据,而不过滤过滤器中的条目列表。在Django 1.11中,有没有一种清洁简便的方法来过滤过滤器?
答案 0 :(得分:0)
回答我自己的问题... 这是我想要的方式(沿着Creating Custom Filters for list_filter in Django Admin的方式):
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>"]