两个日期之间的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
唯一的缺点是最好将这个函数移到类之外(因为我想在多个过滤器中使用它)