From 889089b4cdf6141484664860e9ecfc2a4fcde80e Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 14 Jun 2022 16:49:58 +0200 Subject: [PATCH] fixed search defaults --- .../migrations/0143_build_full_text_index.py | 11 ++++++-- .../0157_alter_searchpreference_trigram.py | 7 ++++- ...ter_searchpreference_icontains_and_more.py | 28 +++++++++++++++++++ cookbook/models.py | 14 ++-------- cookbook/signals.py | 11 +++++++- 5 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 cookbook/migrations/0176_alter_searchpreference_icontains_and_more.py diff --git a/cookbook/migrations/0143_build_full_text_index.py b/cookbook/migrations/0143_build_full_text_index.py index 927eaa94..641efe4e 100644 --- a/cookbook/migrations/0143_build_full_text_index.py +++ b/cookbook/migrations/0143_build_full_text_index.py @@ -9,8 +9,15 @@ from django.utils import translation from django_scopes import scopes_disabled from cookbook.managers import DICTIONARY -from cookbook.models import (Index, PermissionModelMixin, Recipe, Step, allSearchFields, - nameSearchField) +from cookbook.models import (Index, PermissionModelMixin, Recipe, Step, SearchFields) + + +def allSearchFields(): + return list(SearchFields.objects.values_list('id', flat=True)) + + +def nameSearchField(): + return [SearchFields.objects.get(name='Name').id] def set_default_search_vector(apps, schema_editor): diff --git a/cookbook/migrations/0157_alter_searchpreference_trigram.py b/cookbook/migrations/0157_alter_searchpreference_trigram.py index 7f5f5531..54000959 100644 --- a/cookbook/migrations/0157_alter_searchpreference_trigram.py +++ b/cookbook/migrations/0157_alter_searchpreference_trigram.py @@ -2,7 +2,12 @@ from django_scopes import scopes_disabled from django.db import migrations, models -from cookbook.models import nameSearchField + +from cookbook.models import SearchFields + + +def nameSearchField(): + return [SearchFields.objects.get(name='Name').id] def add_default_trigram(apps, schema_editor): diff --git a/cookbook/migrations/0176_alter_searchpreference_icontains_and_more.py b/cookbook/migrations/0176_alter_searchpreference_icontains_and_more.py new file mode 100644 index 00000000..e485ed07 --- /dev/null +++ b/cookbook/migrations/0176_alter_searchpreference_icontains_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.0.4 on 2022-06-14 14:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0175_remove_userpreference_space'), + ] + + operations = [ + migrations.AlterField( + model_name='searchpreference', + name='icontains', + field=models.ManyToManyField(blank=True, related_name='icontains_fields', to='cookbook.searchfields'), + ), + migrations.AlterField( + model_name='searchpreference', + name='trigram', + field=models.ManyToManyField(blank=True, related_name='trigram_fields', to='cookbook.searchfields'), + ), + migrations.AlterField( + model_name='searchpreference', + name='unaccent', + field=models.ManyToManyField(blank=True, related_name='unaccent_fields', to='cookbook.searchfields'), + ), + ] diff --git a/cookbook/models.py b/cookbook/models.py index 22bdf90f..b9347e0f 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -1149,14 +1149,6 @@ class SearchFields(models.Model, PermissionModelMixin): return _(self.name) -def allSearchFields(): - return list(SearchFields.objects.values_list('id', flat=True)) - - -def nameSearchField(): - return [SearchFields.objects.get(name='Name').id] - - class SearchPreference(models.Model, PermissionModelMixin): # Search Style (validation parsleyjs.org) # phrase or plain or raw (websearch and trigrams are mutually exclusive) @@ -1175,10 +1167,10 @@ class SearchPreference(models.Model, PermissionModelMixin): search = models.CharField(choices=SEARCH_STYLE, max_length=32, default=SIMPLE) lookup = models.BooleanField(default=False) - unaccent = models.ManyToManyField(SearchFields, related_name="unaccent_fields", blank=True, default=allSearchFields) - icontains = models.ManyToManyField(SearchFields, related_name="icontains_fields", blank=True, default=nameSearchField) + unaccent = models.ManyToManyField(SearchFields, related_name="unaccent_fields", blank=True) + icontains = models.ManyToManyField(SearchFields, related_name="icontains_fields", blank=True) istartswith = models.ManyToManyField(SearchFields, related_name="istartswith_fields", blank=True) - trigram = models.ManyToManyField(SearchFields, related_name="trigram_fields", blank=True, default=nameSearchField) + trigram = models.ManyToManyField(SearchFields, related_name="trigram_fields", blank=True) fulltext = models.ManyToManyField(SearchFields, related_name="fulltext_fields", blank=True) trigram_threshold = models.DecimalField(default=0.2, decimal_places=2, max_digits=3) diff --git a/cookbook/signals.py b/cookbook/signals.py index 18ae917b..624ffa53 100644 --- a/cookbook/signals.py +++ b/cookbook/signals.py @@ -12,7 +12,7 @@ from django_scopes import scope, scopes_disabled from cookbook.helper.shopping_helper import RecipeShoppingEditor from cookbook.managers import DICTIONARY from cookbook.models import (Food, FoodInheritField, Ingredient, MealPlan, Recipe, - ShoppingListEntry, Step, UserPreference) + ShoppingListEntry, Step, UserPreference, SearchPreference, SearchFields) SQLITE = True if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', @@ -40,6 +40,15 @@ def create_user_preference(sender, instance=None, created=False, **kwargs): UserPreference.objects.get_or_create(user=instance) +@receiver(post_save, sender=SearchPreference) +def create_search_preference(sender, instance=None, created=False, **kwargs): + if created: + with scopes_disabled(): + instance.unaccent.add(SearchFields.objects.get(name='Name')) + instance.icontains.add(SearchFields.objects.get(name='Name')) + instance.trigram.add(SearchFields.objects.get(name='Name')) + + @receiver(post_save, sender=Recipe) @skip_signal def update_recipe_search_vector(sender, instance=None, created=False, **kwargs):