Форма администратора Django выдает IntegrityError для модели с условным UniqueConstraint
Меня попросили добавить некоторую логику для моделирования уникальности.
Каждый Платеж должен иметь заполненный либо transaction_id, либо payment_id.
Каждый платеж идентифицируется по (transaction_id, operation, payment_created_date) или (payment_id, operation, payment_created_date).
На уровне базы данных это работает нормально.
Вставка платежа с одним и тем же transaction_id, operation, payment_created_date дважды приводит к нарушению уникального ограничения.
Для этой модели я создал страницу администратора. Но вставка одной и той же строки на странице администратора приводит к ошибке IntegrityError at /admin/finance/payment/add/ duplicate key value violates unique constraint "unique_finance_payment_without_payment_id" DETAIL: Key (transaction_id, operation, payment_created_date)=(dasdasd, Refund, 2021-10-04) already exists.
вместо простой и удобной для пользователя ошибки администратора Please correct the error below. Payment with this Transaction id, Operation and Payment created date already exists
. Как заставить Django admin поймать эту IntegrityError и показать ее в форме администратора?
вот мой models.py
а это мой admin.py
class PaymentForm(forms.ModelForm):
class Meta:
fields = (
'report_name',
'operation',
'payment_created_date',
'amount',
'commission',
'currency',
'transaction_id',
'payment_id',
)
@admin.register(Payment)
class PaymentAdmin(ImportExportMixin, admin.ModelAdmin):
form = PaymentForm
list_display = [
'report_name',
'operation',
'payment_created_date',
'amount',
'commission',
'currency',
'transaction_id',
'payment_id',
]
list_filter = (
'report_name',
'operation',
('payment_created_date', DateRangeFilter),
)
search_fields = ['report_name__name', 'operation']
resource_class = PaymentResource
class Meta:
model = Payment