Мне нужно протестировать фильтры django, применяя различные lookup_expr к одному и тому же полю

У меня есть модель challenge с полями: name, start_date и end_date. Мне нужно применить различные фильтры django к каждому полю следующим образом

class ChallengeFilter(filters.FilterSet):
    class Meta:
        model = Challenge
        fields = {
            "name": ["exact", "icontains"],
            "start_date": ["exact", "lte", "gte"],
            "end_date": ["exact", "lte", "gte"],
        }

когда я тестирую точный lookup_expr, он работает нормально, но мне нужна помощь в тестировании "icontains" или "lte" или "gte"

Вот мой тест на точность

def test_challenge_filter_by_name(self, user):
        c1 = ChallengeFactory(name="chal", owner=user)
        c2 = ChallengeFactory(name="star", owner=user)

        data = {
            "name": "chal",
        }
        challenge_filter = ChallengeFilter(data, queryset=Challenge.objects.all())
        assert challenge_filter.is_valid()
        assert challenge_filter.qs.count() == 1

и вот тест, который я пробовал с contains, но if fails assert 0 == 1

def test_challenge_filter_by_name_contains(self, user):
        c1 = ChallengeFactory(name="chal", owner=user)
        c2 = ChallengeFactory(name="star", owner=user)

        data = {
            "name": "challenge",
        }
        challenge_filter = ChallengeFilter(data, queryset=Challenge.objects.all())
        assert challenge_filter.is_valid()
        assert challenge_filter.qs.count() == 1

Я также не знаю, как проверить gte и lte на даты.

Вы пытаетесь проверить, содержится ли "challenge" в "chal" или "star". Вам следует назвать один челлендж "challenge", а затем отфильтровать по "chal".

c1 = ChallengeFactory(name="challange", owner=user)
c2 = ChallengeFactory(name="star", owner=user)

data = {
    "name": "chall",
}
challenge_filter = ChallengeFilter(data, queryset=Challenge.objects.all())
assert challenge_filter.is_valid()
assert challenge_filter.qs.count() == 1
Вернуться на верх