Мне нужно протестировать фильтры 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