diff --git a/cookbook/admin.py b/cookbook/admin.py index 73e86ecf5..a252185f5 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -15,7 +15,7 @@ from .models import (BookmarkletImport, Comment, CookLog, Food, FoodInheritField Recipe, RecipeBook, RecipeBookEntry, RecipeImport, SearchPreference, ShareLink, ShoppingList, ShoppingListEntry, ShoppingListRecipe, Space, Step, Storage, Supermarket, SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, - TelegramBot, Unit, UserFile, UserPreference, ViewLog) + TelegramBot, Unit, UserFile, UserPreference, ViewLog, Automation) class CustomUserAdmin(UserAdmin): @@ -29,11 +29,52 @@ admin.site.register(User, CustomUserAdmin) admin.site.unregister(Group) +@admin.action(description='Delete all data from a space') +def delete_space_action(modeladmin, request, queryset): + for space in queryset: + CookLog.objects.filter(space=space).delete() + ViewLog.objects.filter(space=space).delete() + ImportLog.objects.filter(space=space).delete() + BookmarkletImport.objects.filter(space=space).delete() + + Comment.objects.filter(recipe__space=space).delete() + Keyword.objects.filter(space=space).delete() + Food.objects.filter(space=space).delete() + Unit.objects.filter(space=space).delete() + Ingredient.objects.filter(space=space).delete() + Step.objects.filter(space=space).delete() + NutritionInformation.objects.filter(space=space).delete() + RecipeBookEntry.objects.filter(book__space=space).delete() + RecipeBook.objects.filter(space=space).delete() + MealType.objects.filter(space=space).delete() + MealPlan.objects.filter(space=space).delete() + ShareLink.objects.filter(space=space).delete() + Recipe.objects.filter(space=space).delete() + + RecipeImport.objects.filter(space=space).delete() + SyncLog.objects.filter(sync__space=space).delete() + Sync.objects.filter(space=space).delete() + Storage.objects.filter(space=space).delete() + + ShoppingListEntry.objects.filter(shoppinglist__space=space).delete() + ShoppingListRecipe.objects.filter(shoppinglist__space=space).delete() + ShoppingList.objects.filter(space=space).delete() + + SupermarketCategoryRelation.objects.filter(supermarket__space=space).delete() + SupermarketCategory.objects.filter(space=space).delete() + Supermarket.objects.filter(space=space).delete() + + InviteLink.objects.filter(space=space).delete() + UserFile.objects.filter(space=space).delete() + Automation.objects.filter(space=space).delete() + + class SpaceAdmin(admin.ModelAdmin): list_display = ('name', 'created_by', 'max_recipes', 'max_users', 'max_file_storage_mb', 'allow_sharing') search_fields = ('name', 'created_by__username') list_filter = ('max_recipes', 'max_users', 'max_file_storage_mb', 'allow_sharing') date_hierarchy = 'created_at' + actions = [delete_space_action] admin.site.register(Space, SpaceAdmin) @@ -128,7 +169,7 @@ def sort_tree(modeladmin, request, queryset): class KeywordAdmin(TreeAdmin): form = movenodeform_factory(Keyword) ordering = ('space', 'path',) - search_fields = ('name', ) + search_fields = ('name',) actions = [sort_tree, enable_tree_sorting, disable_tree_sorting] @@ -171,13 +212,15 @@ class RecipeAdmin(admin.ModelAdmin): admin.site.register(Recipe, RecipeAdmin) admin.site.register(Unit) + + # admin.site.register(FoodInheritField) class FoodAdmin(TreeAdmin): form = movenodeform_factory(Keyword) ordering = ('space', 'path',) - search_fields = ('name', ) + search_fields = ('name',) actions = [sort_tree, enable_tree_sorting, disable_tree_sorting]