【问题标题】:Django filter testingDjango过滤器测试
【发布时间】:2018-01-27 03:17:58
【问题描述】:
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

【问题讨论】:

    标签: django python-3.x django-testing django-filter


    【解决方案1】:

    您可以单独测试过滤方法,也可以测试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
    

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2018-07-31
      • 2020-01-05
      • 1970-01-01
      • 2017-03-30
      • 2021-08-28
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多