Как проверить дублируется ли пост в базе данных django?
Всем доброго дня, хотел бы узнать, как можно реализовать проверку на дублирующую запись или пост. Допустим у меня есть пост где указывается Категория, Имя автора, Заголовок, и мне нужно проверить а не дублируются ли все эти значения снова в один и тот же пост, не подскажите куда копать, может есть готовые приложения? или кто то сталкивался с данной ситуацией.
я так понимаю что я должен во вьюхе написать цикл, который пройдётся по всем данным в базе, и проверит их на сходство введённых данных из формы, типа if category and author and name == данные из формы, тогда выдаёт ошибку, если хоть одно из значений не совпадёт, тогда добро пожаловать в базу (Привем Категория = Детектив, Автор = Джек Лондон, Имя = Шерлок Холмс, ну допустим и вот если я точно такие же данные внесу в форму, он выдаст ошибку. если я введу Детектив, Джек Лондон и Имя например Анна Каренина, он внесёт эти данные в базу)
Благодарю за любую помощь. Спасибо
Обычно просто навешивается уникальный индекс. Если прям длинный текст надо сравнивать - то можно контрольную сумму посчитать. Если "нечеткий поиск" нужен - это наверно уже движок полнотекстового поиска надо прикручивать.
unique_together задает один или несколько уникальных составных ключей. Составные - это когда уникальным считается кортеж из всех полей, входящих в индекс, а не каждое поле по-отдельности.
Сергей Тихонов, Значит он увы не подходит. я так понимаю что я должен во вьюхе написать цикл, который пройдётся по всем данным в базе, и проверит их на сходство введённых данных из формы, типа if category and author and name == данные из формы, тогда выдаёт ошибку, если хоть одно из значений не совпадёт, тогда добро пожаловать в базу (Привем Категория = Детектив, Автор = Джек Лондон, Имя = Шерлок Холмс, ну допустим и вот если я точно такие же данные внесу в форму, он выдаст ошибку. если я введу Детектив, Джек Лондон и Имя например Анна Каренина, он внесёт эти данные в базу)
Сергей Тихонов, Спасибо большое, вы мне очень помогли. но чуть чуть доработал. Огромное спасибо
Выкладываю код, вдруг кому пригодится.
form = AddBookForm
if request.method =='POST':
form = AddBookForm(request.POST)
if form.is_valid():
get_category = Category.objects.get(name=form.cleaned_data["category"])#получаем имя категории
get_book, create_book = Book.objects.get_or_create(
name=form.cleaned_data["name"],#наименование книги
category=form.cleaned_data["category"], #категория
)
if not create_book :
raise ValidationError("Есть совпадения, проверьте на дубль")
else:
return redirect('/') # Сохраняет форму и перекидывает на главную, можно подкрутить сообщение типа книга добавлена