首页 > 解决方案 > 在管理页面上捕获 IntegrityError 的最佳方法?

问题描述

我试图在 admin.py 文件中捕获 IntegrityError,但无法正确执行。有办法吗?请注意,我将 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)

标签: pythondjangodjango-admin

解决方案


推荐阅读