Лучший способ поймать IntegrityError на странице администратора?
Я пытаюсь поймать IntegrityError в файле admin.py, но не могу сделать это правильно. Есть ли вообще какой-нибудь способ? Обратите внимание, что я использую UniqueConstraint для моей модели рецепта, так как я не хочу дублирования тегов и ингредиентов.
Для многих полей в моей модели Recipe Admin я использовал инлайнеры. IntegrityError возникает, когда я специально пытаюсь создать рецепт с двумя одинаковыми тегами.
from recipes.models import (
Recipe, Ingredient, Tag, RecipeIngredient, RecipeTag
)
from django.contrib import admin
class RecipeIngredientInline(admin.TabularInline):
model = Recipe.ingredients.through
class RecipeTagInline(admin.TabularInline):
model = Recipe.tags.through
class RecipeAdmin(admin.ModelAdmin):
search_fields = ('name',)
readonly_fields=('total_favorites',)
list_filter = ('tags',)
inlines = (RecipeIngredientInline, RecipeTagInline)
@admin.display(empty_value='---empty---')
def total_favorites(self, obj):
return obj.userrecipe_set.all().count()
def save_model(self, request, obj, form, change):
# Here I am trying to catch the exception, but without joy.
breakpoint()
super().save_model(request, obj, form, change)
class IngredientAdmin(admin.ModelAdmin):
search_fields = ('name',)
list_filter = ('measurement_unit',)
class TagAdmin(admin.ModelAdmin):
search_fields = ('name',)
list_filter = ('slug',)
class RecipeIngredientAdmin(admin.ModelAdmin):
search_fields = ('recipe__name',)
class RecipeTagAdmin(admin.ModelAdmin):
search_fields = ('recipe__name',)
admin.site.register(Recipe, RecipeAdmin)
admin.site.register(Ingredient, IngredientAdmin)
admin.site.register(Tag, TagAdmin)
admin.site.register(RecipeIngredient, RecipeIngredientAdmin)
admin.site.register(RecipeTag, RecipeTagAdmin)