python - 在管理页面上捕获 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)
解决方案
推荐阅读
- router-outlet - 将 Angular 版本 8 更新到 11 后,应用程序未运行
- c++ - C++ 拥有作为指向另一个类的指针(或引用)并且可以处理 const 和非 const 情况的类成员的最佳方式
- python - 尝试使用函数(整数)更改变量
- python - 读取基于文本的(床)文件,将新列添加到它们保存在 csv 文件中
- java - 将 MouseListener 添加到 Netbeans TopComponent
- yii2 - Yii mdmsoft 获取有权访问特定路由的用户 id
- javascript - 检查函数中的 JavaScript 变量是否未定义/错误
- vue.js - 如何使文本左右对齐?
- delphi - 如何在设计时将格式丰富的文本分配给 Delphi TRichEdit 或 TcxRichEdit(可能使用 Lines 属性)?
- firebase - 即使屏幕被锁定,我如何让 Flutter 应用程序在收到后台 firebase 消息时启动我希望我的应用程序启动