两个日期之间的Django过滤器

两个日期之间的Django过滤器,django,django-filter,Django,Django Filter,不幸的是,我陷入困境,无法找到有效的解决方案,我的模型如下所示: class SubOperatorAssignment(models.Model): operator = models.ForeignKey(Operator, on_delete=models.CASCADE) sub_operator = models.ForeignKey(SubOperator, on_delete=models.CASCADE) start_date = models.DateF

不幸的是,我陷入困境,无法找到有效的解决方案,我的模型如下所示:

class SubOperatorAssignment(models.Model):
    operator = models.ForeignKey(Operator, on_delete=models.CASCADE)
    sub_operator = models.ForeignKey(SubOperator, on_delete=models.CASCADE)
    start_date = models.DateField(blank=False, null=False, verbose_name='Start Date')
    end_date = models.DateField(blank=False, null=False, verbose_name='End Date')
我想让用户选择一个日期(使用Django过滤器库)并在过滤器中检查给定的日期是否在模型开始日期和结束日期之间。不幸的是,日期过滤器只接受一个字段名,并且似乎没有查找表达式。感谢您对如何实现这一目标的任何提示

试试这个

SubOperatorAssignment.objects.filter(start_date__gte=date, end_date__lte=date)

参考

不完美,但至少是一个起点:

class SubOperatorAssignmentFilter(django_filters.FilterSet):
    operator = django_filters.ModelChoiceFilter(queryset=Operator.objects.all(), label='Operator')

    sub_operator = django_filters.ModelChoiceFilter(field_name='sub_operator', queryset=SubOperator.objects.all(),
                                                    label='Sub Operator')

    test = django_filters.CharFilter(field_name='test',
                                     method='filter_between_date_range',
                                     )

    class Meta:
        model = SubOperatorAssignment
        fields = {}

    def filter_between_date_range(self, queryset, name, value):
        _model = self.Meta.model
        ret_qset = _model.objects.filter(start_date__lte=value, end_date__gte=value)

        return ret_qset
实现一个自定义筛选方法,并使用一个实际接受方法参数的CharFilter

唯一的缺点是最好将这个函数移到类之外(因为我想在多个过滤器中使用它)