Как создать форму редактирования объекта с уникальным полем в Django?

Делаю форму добавления категорий разделов на сайте. Хочу сделать форму редактирования раздела, но так как имя раздела уникальное, при переданном instance для предварительного заполнения формы, form.is_valid() возвращает False и я не могу обработать форму правильно. Подскажите пожалуйста, как мне проверять поле имени в форме на уникальность только при добавлении раздела, а при редактировании нет? Форма:

class EditSectionForm(forms.ModelForm):
    class Meta:
        model = Section
        fields = ['name', 'description']

    def __init__(self, *args, **kwargs):
        super(EditSectionForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget = forms.TextInput(attrs={'class': 'form-control', 'id': 'edit_name_field'})
        self.fields['description'].widget = forms.Textarea(attrs={'class': 'form-control'})

        self.fields['name'].required = False
        self.fields['description'].required = False

Обработка формы:

def EditSectionView(request, objId):
    if request.method == 'POST':
        form = EditSectionForm(request.POST)
        if form.is_valid():
            try:
                obj = Section.objects.get(id=objId)
                if form.cleaned_data['name']:
                    obj.name = form.cleaned_data['name']
                if form.cleaned_data['description']:
                    obj.description = form.cleaned_data['description']
                obj.save()
                return HttpResponseRedirect('/ref/sections')
            except Section.DoesNotExist:
                return HttpResponseNotFound('Not exist')
        else:
            return render(request, 'sections.html', {
                'form': form,
                'objId': objId
            })
    if request.method == 'GET':
        form = EditSectionForm(instance=Section.objects.get(id=objId))
        return render(request, 'sections.html', {
            'form': form,
            'objId': objId
        })

Ценна любая помощь. Спасибо!


Ответы (0 шт):