Django 1.11如何过滤过滤器的内容?

问题描述 投票:0回答:1

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中的过滤器?

django filter model admin
1个回答
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>"]

© www.soinside.com 2019 - 2024. All rights reserved.