fixed search defaults

This commit is contained in:
vabene1111 2022-06-14 16:49:58 +02:00
parent e7de6f62b6
commit 889089b4cd
5 changed files with 56 additions and 15 deletions

View File

@ -9,8 +9,15 @@ from django.utils import translation
from django_scopes import scopes_disabled from django_scopes import scopes_disabled
from cookbook.managers import DICTIONARY from cookbook.managers import DICTIONARY
from cookbook.models import (Index, PermissionModelMixin, Recipe, Step, allSearchFields, from cookbook.models import (Index, PermissionModelMixin, Recipe, Step, SearchFields)
nameSearchField)
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): def set_default_search_vector(apps, schema_editor):

View File

@ -2,7 +2,12 @@
from django_scopes import scopes_disabled from django_scopes import scopes_disabled
from django.db import migrations, models 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): def add_default_trigram(apps, schema_editor):

View File

@ -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'),
),
]

View File

@ -1149,14 +1149,6 @@ class SearchFields(models.Model, PermissionModelMixin):
return _(self.name) 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): class SearchPreference(models.Model, PermissionModelMixin):
# Search Style (validation parsleyjs.org) # Search Style (validation parsleyjs.org)
# phrase or plain or raw (websearch and trigrams are mutually exclusive) # 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) search = models.CharField(choices=SEARCH_STYLE, max_length=32, default=SIMPLE)
lookup = models.BooleanField(default=False) lookup = models.BooleanField(default=False)
unaccent = models.ManyToManyField(SearchFields, related_name="unaccent_fields", blank=True, default=allSearchFields) unaccent = models.ManyToManyField(SearchFields, related_name="unaccent_fields", blank=True)
icontains = models.ManyToManyField(SearchFields, related_name="icontains_fields", blank=True, default=nameSearchField) icontains = models.ManyToManyField(SearchFields, related_name="icontains_fields", blank=True)
istartswith = models.ManyToManyField(SearchFields, related_name="istartswith_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) fulltext = models.ManyToManyField(SearchFields, related_name="fulltext_fields", blank=True)
trigram_threshold = models.DecimalField(default=0.2, decimal_places=2, max_digits=3) trigram_threshold = models.DecimalField(default=0.2, decimal_places=2, max_digits=3)

View File

@ -12,7 +12,7 @@ from django_scopes import scope, scopes_disabled
from cookbook.helper.shopping_helper import RecipeShoppingEditor from cookbook.helper.shopping_helper import RecipeShoppingEditor
from cookbook.managers import DICTIONARY from cookbook.managers import DICTIONARY
from cookbook.models import (Food, FoodInheritField, Ingredient, MealPlan, Recipe, from cookbook.models import (Food, FoodInheritField, Ingredient, MealPlan, Recipe,
ShoppingListEntry, Step, UserPreference) ShoppingListEntry, Step, UserPreference, SearchPreference, SearchFields)
SQLITE = True SQLITE = True
if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 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) 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) @receiver(post_save, sender=Recipe)
@skip_signal @skip_signal
def update_recipe_search_vector(sender, instance=None, created=False, **kwargs): def update_recipe_search_vector(sender, instance=None, created=False, **kwargs):