Добрый день!
Я отрисовываю форму через CreateView и UpdateView. Они оба базируются на
form_class = CategoryForm
Соответсвенно, сама форма:
class CategoryForm(ModelForm):
class Meta:
model = Category
fields = '__all__'
def clean_fieldname(self):
data = self.cleaned_data['data']
check = Category.objects.filter(data=data).exists()
if check:
raise ValidationError('Already exists')
else:
return data
В форме я проверяю уникальность введенного значения. unique не использую, так как это поле должно быть уникально только в рамках своей категории, которая указана в другом поле таблицы. Соответственно, в таблице может быть несколько одинаковых data с разными другими полями.
Вопрос в том, как проверить это поле на уникальность. Мой код справляется при создании новой записи. Но при редактировании он выдает исключение, так как такая запись уже есть (та самая, которую редактируем).
Как вариант, можно проверять через
.count() > 1
Но может быть есть более элегантный способ? Этот не нравится тем, что будет перебирать всю базу, а это затратно (конечно не на моем проекте, но лучше сразу постигать правильные техники :) )