Лучший способ поймать 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)

Вернуться на верх