Django Admin выдает ошибку целостности, когда я устанавливаю UniqueConstraint на модель
Я разрабатываю систему управления библиотекой и хочу избежать дублирования записей, У меня есть следующая модель книги:
class Book(models.Model):
isbn = models.CharField(max_length=13, unique=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
preview = models.ImageField(upload_to='books/')
author = models.ForeignKey(Author, on_delete=models.CASCADE)
stock = models.PositiveIntegerField(default=0)
assigned = models.PositiveIntegerField(default=0)
class Meta:
constraints = [
models.UniqueConstraint(Lower('title'), 'author', name="unique_book_with_author" )
]
def __str__(self) -> str:
return self.title
Я хочу убедиться, что книга с таким же инказитивным названием и автором существует только один раз, Теперь я хочу, чтобы если пользователь попытается добавить дубликат записи, он получил красивое сообщение об ошибке, эта книга уже существует, но администратор выдает ошибку Integrity как Follow:
Мой класс администратора следующий:
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'category', 'assigned', 'is_available' ]
search_fields = [ 'title', 'author__name__startswith' ]
@admin.display(ordering='is_available', boolean=True)
def is_available(self, book):
return book.stock > book.assigned
def get_search_results(self, request, queryset, search_term: str):
queryset, use_distinct = super().get_search_results(request, queryset, search_term)
queryset = get_int_search_result(queryset, self.model, search_term, 'isbn')
return queryset, use_distinct
Документы не помогают мне, пожалуйста, подскажите, что мне делать? Потому что когда я использую unique_together в классе Meta (который скоро будет устаревшим, как указано в документации), все работает нормально и django admin выдает хорошее сообщение об ошибке, но когда я использую UniqueConstraint, он выдает ошибку и не обрабатывает ее