mirror of
				https://github.com/django/django.git
				synced 2025-10-26 07:06:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.db.models import Value
 | |
| from django.db.models.functions import StrIndex
 | |
| from django.test import TestCase
 | |
| from django.utils import timezone
 | |
| 
 | |
| from ..models import Article, Author
 | |
| 
 | |
| 
 | |
| class StrIndexTests(TestCase):
 | |
|     def test_annotate_charfield(self):
 | |
|         Author.objects.create(name='George. R. R. Martin')
 | |
|         Author.objects.create(name='J. R. R. Tolkien')
 | |
|         Author.objects.create(name='Terry Pratchett')
 | |
|         authors = Author.objects.annotate(fullstop=StrIndex('name', Value('R.')))
 | |
|         self.assertQuerysetEqual(authors.order_by('name'), [9, 4, 0], lambda a: a.fullstop)
 | |
| 
 | |
|     def test_annotate_textfield(self):
 | |
|         Article.objects.create(
 | |
|             title='How to Django',
 | |
|             text='This is about How to Django.',
 | |
|             written=timezone.now(),
 | |
|         )
 | |
|         Article.objects.create(
 | |
|             title='How to Tango',
 | |
|             text="Won't find anything here.",
 | |
|             written=timezone.now(),
 | |
|         )
 | |
|         articles = Article.objects.annotate(title_pos=StrIndex('text', 'title'))
 | |
|         self.assertQuerysetEqual(articles.order_by('title'), [15, 0], lambda a: a.title_pos)
 | |
| 
 | |
|     def test_order_by(self):
 | |
|         Author.objects.create(name='Terry Pratchett')
 | |
|         Author.objects.create(name='J. R. R. Tolkien')
 | |
|         Author.objects.create(name='George. R. R. Martin')
 | |
|         self.assertQuerysetEqual(
 | |
|             Author.objects.order_by(StrIndex('name', Value('R.')).asc()), [
 | |
|                 'Terry Pratchett',
 | |
|                 'J. R. R. Tolkien',
 | |
|                 'George. R. R. Martin',
 | |
|             ],
 | |
|             lambda a: a.name
 | |
|         )
 | |
|         self.assertQuerysetEqual(
 | |
|             Author.objects.order_by(StrIndex('name', Value('R.')).desc()), [
 | |
|                 'George. R. R. Martin',
 | |
|                 'J. R. R. Tolkien',
 | |
|                 'Terry Pratchett',
 | |
|             ],
 | |
|             lambda a: a.name
 | |
|         )
 | |
| 
 | |
|     def test_unicode_values(self):
 | |
|         Author.objects.create(name='ツリー')
 | |
|         Author.objects.create(name='皇帝')
 | |
|         Author.objects.create(name='皇帝 ツリー')
 | |
|         authors = Author.objects.annotate(sb=StrIndex('name', Value('リ')))
 | |
|         self.assertQuerysetEqual(authors.order_by('name'), [2, 0, 5], lambda a: a.sb)
 | |
| 
 | |
|     def test_filtering(self):
 | |
|         Author.objects.create(name='George. R. R. Martin')
 | |
|         Author.objects.create(name='Terry Pratchett')
 | |
|         self.assertQuerysetEqual(
 | |
|             Author.objects.annotate(middle_name=StrIndex('name', Value('R.'))).filter(middle_name__gt=0),
 | |
|             ['George. R. R. Martin'],
 | |
|             lambda a: a.name
 | |
|         )
 |