test_trim.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.db.models import CharField
  2. from django.db.models.functions import LTrim, RTrim, Trim
  3. from django.test import TestCase
  4. from .models import Author
  5. class TrimTests(TestCase):
  6. def test_trim(self):
  7. Author.objects.create(name=' John ', alias='j')
  8. Author.objects.create(name='Rhonda', alias='r')
  9. authors = Author.objects.annotate(
  10. ltrim=LTrim('name'),
  11. rtrim=RTrim('name'),
  12. trim=Trim('name'),
  13. )
  14. self.assertQuerysetEqual(
  15. authors.order_by('alias'), [
  16. ('John ', ' John', 'John'),
  17. ('Rhonda', 'Rhonda', 'Rhonda'),
  18. ],
  19. lambda a: (a.ltrim, a.rtrim, a.trim)
  20. )
  21. def test_trim_transform(self):
  22. Author.objects.create(name=' John ')
  23. Author.objects.create(name='Rhonda')
  24. tests = (
  25. (LTrim, 'John '),
  26. (RTrim, ' John'),
  27. (Trim, 'John'),
  28. )
  29. for transform, trimmed_name in tests:
  30. with self.subTest(transform=transform):
  31. try:
  32. CharField.register_lookup(transform)
  33. authors = Author.objects.filter(**{'name__%s' % transform.lookup_name: trimmed_name})
  34. self.assertQuerysetEqual(authors, [' John '], lambda a: a.name)
  35. finally:
  36. CharField._unregister_lookup(transform)