class BusinessPartnerFilter(SilBaseFilter):
active = django_filters.BooleanFilter(
name='date_deactivated', lookup_expr='isnull')
parent_name = django_filters.CharFilter(name='parent__name')
unmapped = django_filters.BooleanFilter(method='check_if_unmapped')
我添加了字段
'unmapped'
上面并创建了方法 filter
以下。有人可以帮我写过滤器的测试吗?我被困住了。class Meta(object):
model = models.BusinessPartner
fields = [
'name', 'bp_type', 'slade_code', 'parent', 'national_identifier',
'active', 'parent_name', 'unmapped'
]
def check_if_unmapped(self, queryset, field, value):
if value:
exclude_bps = [record.id for record in queryset if record.mapped == 0 and record.unmapped == 0]
return queryset.exclude(id__in=exclude_bps)
return queryset
最佳答案
您可以单独测试过滤器方法,也可以测试 FilterSet.qs
的评估.
要测试过滤器方法,您不一定需要完全初始化的 FilterSet
.
qs = BusinessPartner.objects.all()
f = BusinessPartnerFilter()
result = f.check_if_unmapped(qs, 'unmapped', True)
# assert something about the result
也就是说,完全初始化
FilterSet
并不困难。并检查 .qs
.qs = BusinessPartner.objects.all()
f = BusinessPartnerFilter(data={'unmapped': 'True'}, queryset=qs)
result = f.qs
# assert something about the result
关于Django 过滤器测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45756602/