Возникла ошибка целостности из-за того, что ограничение не может быть переопределено в панели администратора Django

У меня есть 4 класса, как показано ниже:

from django.db import models

class A(models.Model):
    title = models.CharField(max_length=100)

class B(models.Model):
    title_b = models.CharField(max_length=100)
    a = models.ForeignKey(A, on_delete=models.CASCADE)

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['title_b'], name='unique_title_b')
        ]

class C(models.Model):
    title_c = models.CharField(max_length=100)
    a = models.ForeignKey(A, on_delete=models.CASCADE)

class D(models.Model):
    title_d = models.CharField(max_length=100)
    a = models.ForeignKey(A, on_delete=models.CASCADE)

Все связанные классы используются как Inline-модель, которая описана ниже:

from django.contrib import admin

class BInline(admin.TabularInline):
    model = B

class CInline(admin.TabularInline):
    model = C

class DInline(admin.TabularInline):
    model = D

А модель администратора класса А определяется как

class AAdmin(admin.ModelAdmin):
    inlines = [BInline, CInline, DInline]

Как вы видите, класс B имеет ограничение на уникальность заголовка. Если я ввожу дубликаты данных для класса B в админ-панели, возникает ошибка целостности и появляется страница ошибки с заголовком IntegrityError at /app/A/81ac3366-4cdb-4cbb-a861-340ff188c760/change/ дублирующее значение ключа нарушает ограничение уникальности "unique_title_b" ПОДРОБНОСТИ: Ключ (title)=(TestDuplicate) уже существует. показано. Для того чтобы показать пользователю дружественное сообщение, а не эту страницу ошибки, я переопределяю метод save_related в class AAdmin, как показано ниже:

def save_related(self, request, form, formsets, change):
        try:
            with transaction.atomic():
                super().save_related(request, form, formsets, change)
        except IntegrityError as e:
            self.message_user(request, 'A related model constraint was violated: {}'.format(e), level=messages.ERROR)

Я ожидал, что после переопределения метода save_related страница ошибки больше не будет отображаться, и пользователь останется на той же странице модели изменений в панели администратора; но после внесения этих изменений страница ошибки снова отображается с заголовком "У объекта CFormFormSet нет атрибута 'new_objects'". Может ли кто-нибудь объяснить мне, где я ошибся?

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