Django-forms: ValidationError не работает / проверка существования атрибута
Я пытаюсь получить ошибку для формы, если имя созданного процесса уже существует. Происходит так, что форма просто не отправляется, но не выдает никаких ошибок на саму форму, отмечая, что происходит. Я искал всевозможные способы заставить ValidationError что-то сделать, но не могу заставить его работать вообще. В остальном форма работает, так как она отправляется, если значение еще не существует. Что я упускаю?
Вот models.py
class Process(models.Model):
name = models.CharField('Process name', max_length=100, unique=True, error_messages={'unique':"Name already in use"})
Вот forms.py
class NewProcess(forms.ModelForm):
class Meta:
model = Process
fields = [
'name',
]
def __init__(self, *args, **kwargs):
super(NewProcess, self).__init__(*args, **kwargs)
def clean_name(self):
process_name = self.cleaned_data.get('name')
existing = Process.objects.filter(name=process_name).exists()
if existing:
raise forms.ValidationError(u"Name already in use")
return process_name
Здесь views.py
def process_create(request, *args, **kwargs):
createprocess = NewProcess(request.POST or None)
processes = Process.objects.all()
if request.method == 'POST':
createprocess = NewProcess(request.POST)
if createprocess.is_valid():
process = createprocess.save(commit=False)
#other functions here
creatprocess.save()
context = {
'processes':processes,
}
return render(request, "process/process-list.html", context)
context = {
'createprocess':createprocess,
}
return render(request, "process/process-create.html", context)
Вы определили метод под названием clean_name
, чтобы вызвать ошибку, однако метод проверки, который вы используете в файле views.py, это is_valid()
, который не возвращает false для дублирующихся имен.