Skip to main content
 首页 » 编程设计

python之将自定义过滤器与 Django ModelChoice 过滤器一起使用

2024年10月01日36JeffreyZhao

我正在尝试创建使用 django-filters 的过滤器方法

请参阅下面的模型示例:

class Chicken(TimeStampedModel): 
    eggs = ForeignKey(Egg) 
 
class Egg(TimeStampedModel): 
    hatched = BooleanField(default=False) 

查看我当前的过滤器设置示例:

class ChickenFilter(FilterSet): 
    eggs__contains = ModelChoiceFilter(name="eggs", method='hatched_eggs', queryset=Eggs.objects.all()) 
 
   def hatched_eggs(self, queryset, name, value): 
      print "We got eggs" 
     return queryset.filter(eggs__hatched=True) 

问题是该方法甚至不打印 We got eggs 当我点击 url 时。它只返回一个空的查询集。

请您参考如下方法:

我是这样做的:

在我的网址中,我发送了 ?ids=1,2,3,4

class MyFilter(filters.FilterSet): 
    ids = django_filters.CharFilter(method='ids__in') 
 
    def ids__in(self, queryset, value, *args, **kwargs): 
        try: 
            if args: 
                ids = args[0].split(',') 
                ids = [int(_id) for _id in ids] 
                queryset = queryset.filter(id__in=ids) 
        except ValueError: 
            pass 
        return queryset