From 12afb3eaa6c93fc6812972ae00bf94d04ed50f5d Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Wed, 29 Sep 2021 09:04:46 +0200 Subject: [PATCH] added search defaults mimicing old search behavior --- cookbook/admin.py | 15 ++++++++- .../0157_alter_searchpreference_trigram.py | 33 +++++++++++++++++++ cookbook/models.py | 4 +-- 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 cookbook/migrations/0157_alter_searchpreference_trigram.py diff --git a/cookbook/admin.py b/cookbook/admin.py index 2146629c..5b1025af 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -14,7 +14,7 @@ from .models import (Comment, CookLog, Food, Ingredient, InviteLink, Keyword, ShoppingList, ShoppingListEntry, ShoppingListRecipe, Space, Step, Storage, Sync, SyncLog, Unit, UserPreference, ViewLog, Supermarket, SupermarketCategory, SupermarketCategoryRelation, - ImportLog, TelegramBot, BookmarkletImport, UserFile) + ImportLog, TelegramBot, BookmarkletImport, UserFile, SearchPreference) from cookbook.managers import DICTIONARY @@ -54,6 +54,19 @@ class UserPreferenceAdmin(admin.ModelAdmin): admin.site.register(UserPreference, UserPreferenceAdmin) +class SearchPreferenceAdmin(admin.ModelAdmin): + list_display = ('name', 'search', 'trigram_threshold',) + search_fields = ('user__username',) + list_filter = ('search',) + + @staticmethod + def name(obj): + return obj.user.get_user_name() + + +admin.site.register(SearchPreference, SearchPreferenceAdmin) + + class StorageAdmin(admin.ModelAdmin): list_display = ('name', 'method') search_fields = ('name',) diff --git a/cookbook/migrations/0157_alter_searchpreference_trigram.py b/cookbook/migrations/0157_alter_searchpreference_trigram.py new file mode 100644 index 00000000..7f5f5531 --- /dev/null +++ b/cookbook/migrations/0157_alter_searchpreference_trigram.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2.7 on 2021-09-29 06:37 +from django_scopes import scopes_disabled + +from django.db import migrations, models +from cookbook.models import nameSearchField + + +def add_default_trigram(apps, schema_editor): + with scopes_disabled(): + SearchFields = apps.get_model('cookbook', 'SearchFields') + SearchPreference = apps.get_model('cookbook', 'SearchPreference') + + name_field = SearchFields.objects.get(name='Name') + + for p in SearchPreference.objects.all(): + if not p.trigram.all() and p.search == 'plain': + p.trigram.add(name_field) + p.save() + + +class Migration(migrations.Migration): + dependencies = [ + ('cookbook', '0156_searchpreference_trigram_threshold'), + ] + + operations = [ + migrations.AlterField( + model_name='searchpreference', + name='trigram', + field=models.ManyToManyField(blank=True, default=nameSearchField, related_name='trigram_fields', to='cookbook.SearchFields'), + ), + migrations.RunPython(add_default_trigram), + ] diff --git a/cookbook/models.py b/cookbook/models.py index cc085f6e..fe763c7e 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -843,7 +843,7 @@ class SearchFields(models.Model, PermissionModelMixin): def allSearchFields(): - return SearchFields.objects.values_list('id') + return list(SearchFields.objects.values_list('id', flat=True)) def nameSearchField(): @@ -871,7 +871,7 @@ class SearchPreference(models.Model, PermissionModelMixin): unaccent = models.ManyToManyField(SearchFields, related_name="unaccent_fields", blank=True, default=allSearchFields) icontains = models.ManyToManyField(SearchFields, related_name="icontains_fields", blank=True, default=nameSearchField) istartswith = models.ManyToManyField(SearchFields, related_name="istartswith_fields", blank=True) - trigram = models.ManyToManyField(SearchFields, related_name="trigram_fields", blank=True) + trigram = models.ManyToManyField(SearchFields, related_name="trigram_fields", blank=True,default=nameSearchField) fulltext = models.ManyToManyField(SearchFields, related_name="fulltext_fields", blank=True) trigram_threshold = models.DecimalField(default=0.1, decimal_places=2, max_digits=3)