Commit ff53d32c536569c50f2bd985edd304038a75bfbf
1 parent
5d06038f
Exists in
master
and in
39 other branches
Adding a field with the author full name and username for filter on search
Showing
4 changed files
with
52 additions
and
1 deletions
Show diff stats
src/proxy/search_indexes.py
| @@ -20,6 +20,7 @@ class WikiIndex(indexes.SearchIndex, indexes.Indexable): | @@ -20,6 +20,7 @@ class WikiIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 20 | modified = indexes.DateTimeField(model_attr='modified', null=True) | 20 | modified = indexes.DateTimeField(model_attr='modified', null=True) |
| 21 | type = indexes.CharField() | 21 | type = indexes.CharField() |
| 22 | icon_name = indexes.CharField() | 22 | icon_name = indexes.CharField() |
| 23 | + author_username = indexes.CharField(null=True) | ||
| 23 | 24 | ||
| 24 | # trac extra fields | 25 | # trac extra fields |
| 25 | collaborators = indexes.CharField(model_attr='collaborators', null=True) | 26 | collaborators = indexes.CharField(model_attr='collaborators', null=True) |
| @@ -36,6 +37,15 @@ class WikiIndex(indexes.SearchIndex, indexes.Indexable): | @@ -36,6 +37,15 @@ class WikiIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 36 | return author.get_full_name() | 37 | return author.get_full_name() |
| 37 | return obj.author | 38 | return obj.author |
| 38 | 39 | ||
| 40 | + def prepare_author_username(self, obj): | ||
| 41 | + author = obj.get_author() | ||
| 42 | + if not author: | ||
| 43 | + return obj.author | ||
| 44 | + return u'{}\n{}'.format( | ||
| 45 | + author.get_full_name(), | ||
| 46 | + author.username, | ||
| 47 | + ) | ||
| 48 | + | ||
| 39 | def prepare_author_url(self, obj): | 49 | def prepare_author_url(self, obj): |
| 40 | author = obj.get_author() | 50 | author = obj.get_author() |
| 41 | if author: | 51 | if author: |
| @@ -65,6 +75,7 @@ class TicketIndex(indexes.SearchIndex, indexes.Indexable): | @@ -65,6 +75,7 @@ class TicketIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 65 | type = indexes.CharField() | 75 | type = indexes.CharField() |
| 66 | icon_name = indexes.CharField() | 76 | icon_name = indexes.CharField() |
| 67 | tag = indexes.CharField(model_attr='status', null=True) | 77 | tag = indexes.CharField(model_attr='status', null=True) |
| 78 | + author_username = indexes.CharField(null=True) | ||
| 68 | 79 | ||
| 69 | # trac extra fields | 80 | # trac extra fields |
| 70 | milestone = indexes.CharField(model_attr='milestone', null=True) | 81 | milestone = indexes.CharField(model_attr='milestone', null=True) |
| @@ -86,6 +97,15 @@ class TicketIndex(indexes.SearchIndex, indexes.Indexable): | @@ -86,6 +97,15 @@ class TicketIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 86 | return author.get_full_name() | 97 | return author.get_full_name() |
| 87 | return obj.author | 98 | return obj.author |
| 88 | 99 | ||
| 100 | + def prepare_author_username(self, obj): | ||
| 101 | + author = obj.get_author() | ||
| 102 | + if not author: | ||
| 103 | + return obj.author | ||
| 104 | + return u'{}\n{}'.format( | ||
| 105 | + author.get_full_name(), | ||
| 106 | + author.username, | ||
| 107 | + ) | ||
| 108 | + | ||
| 89 | def prepare_author_url(self, obj): | 109 | def prepare_author_url(self, obj): |
| 90 | author = obj.get_author() | 110 | author = obj.get_author() |
| 91 | if author: | 111 | if author: |
| @@ -120,6 +140,7 @@ class RevisionIndex(indexes.SearchIndex, indexes.Indexable): | @@ -120,6 +140,7 @@ class RevisionIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 120 | modified = indexes.DateTimeField(model_attr='created', null=True) | 140 | modified = indexes.DateTimeField(model_attr='created', null=True) |
| 121 | type = indexes.CharField() | 141 | type = indexes.CharField() |
| 122 | icon_name = indexes.CharField() | 142 | icon_name = indexes.CharField() |
| 143 | + author_username = indexes.CharField(null=True) | ||
| 123 | 144 | ||
| 124 | # trac extra fields | 145 | # trac extra fields |
| 125 | repository_name = indexes.CharField(model_attr='repository_name') | 146 | repository_name = indexes.CharField(model_attr='repository_name') |
| @@ -137,6 +158,15 @@ class RevisionIndex(indexes.SearchIndex, indexes.Indexable): | @@ -137,6 +158,15 @@ class RevisionIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 137 | return author.get_full_name() | 158 | return author.get_full_name() |
| 138 | return obj.author | 159 | return obj.author |
| 139 | 160 | ||
| 161 | + def prepare_author_username(self, obj): | ||
| 162 | + author = obj.get_author() | ||
| 163 | + if not author: | ||
| 164 | + return obj.author | ||
| 165 | + return u'{}\n{}'.format( | ||
| 166 | + author.get_full_name(), | ||
| 167 | + author.username, | ||
| 168 | + ) | ||
| 169 | + | ||
| 140 | def prepare_author_url(self, obj): | 170 | def prepare_author_url(self, obj): |
| 141 | author = obj.get_author() | 171 | author = obj.get_author() |
| 142 | if author: | 172 | if author: |
src/search/forms.py
| @@ -62,7 +62,9 @@ class ColabSearchForm(SearchForm): | @@ -62,7 +62,9 @@ class ColabSearchForm(SearchForm): | ||
| 62 | sqs = sqs.order_by(*dict_order['fields']) | 62 | sqs = sqs.order_by(*dict_order['fields']) |
| 63 | 63 | ||
| 64 | if self.cleaned_data['author']: | 64 | if self.cleaned_data['author']: |
| 65 | - sqs = sqs.filter(author=self.cleaned_data['author']) | 65 | + sqs = sqs.filter( |
| 66 | + author_username__contains=self.cleaned_data['author'] | ||
| 67 | + ) | ||
| 66 | 68 | ||
| 67 | if self.cleaned_data['milestone']: | 69 | if self.cleaned_data['milestone']: |
| 68 | sqs = sqs.filter(milestone=self.cleaned_data['milestone']) | 70 | sqs = sqs.filter(milestone=self.cleaned_data['milestone']) |
src/super_archives/search_indexes.py
| @@ -21,7 +21,9 @@ class ThreadIndex(indexes.SearchIndex, indexes.Indexable): | @@ -21,7 +21,9 @@ class ThreadIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 21 | type = indexes.CharField() | 21 | type = indexes.CharField() |
| 22 | icon_name = indexes.CharField() | 22 | icon_name = indexes.CharField() |
| 23 | tag = indexes.CharField(model_attr='mailinglist__name') | 23 | tag = indexes.CharField(model_attr='mailinglist__name') |
| 24 | + collaborators = indexes.CharField(use_template=True) | ||
| 24 | 25 | ||
| 26 | + author_username = indexes.CharField(null=True) | ||
| 25 | mailinglist_url = indexes.CharField( | 27 | mailinglist_url = indexes.CharField( |
| 26 | model_attr='mailinglist__get_absolute_url' | 28 | model_attr='mailinglist__get_absolute_url' |
| 27 | ) | 29 | ) |
| @@ -35,6 +37,16 @@ class ThreadIndex(indexes.SearchIndex, indexes.Indexable): | @@ -35,6 +37,16 @@ class ThreadIndex(indexes.SearchIndex, indexes.Indexable): | ||
| 35 | def prepare_author(self, obj): | 37 | def prepare_author(self, obj): |
| 36 | return obj.message_set.first().from_address.get_full_name() | 38 | return obj.message_set.first().from_address.get_full_name() |
| 37 | 39 | ||
| 40 | + def prepare_author_username(self, obj): | ||
| 41 | + from_address = obj.message_set.first().from_address | ||
| 42 | + if not from_address.user: | ||
| 43 | + return from_address.get_full_name() | ||
| 44 | + | ||
| 45 | + return u'{}\n{}'.format( | ||
| 46 | + from_address.get_full_name(), | ||
| 47 | + from_address.user.username, | ||
| 48 | + ) | ||
| 49 | + | ||
| 38 | def prepare_author_url(self, obj): | 50 | def prepare_author_url(self, obj): |
| 39 | first_message = obj.message_set.first() | 51 | first_message = obj.message_set.first() |
| 40 | if first_message.from_address.user: | 52 | if first_message.from_address.user: |
src/super_archives/templates/search/indexes/super_archives/thread_collaborators.txt
0 → 100644