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

Возможно, вопрос новичков, поэтому, пожалуйста, несите меня.

У меня есть форма Django, которая редактирует определенный экземпляр модели. Чтобы узнать, какой объект редактируется, у меня есть скрытое поле, содержащее идентификатор объекта, а также URL-адрес, содержащий идентификатор.

Первый вопрос : имеет ли идентификатор объекта в скрытом поле правильный способ его выполнения?

Моя (возможно, необоснованная) озабоченность тем, что она только в качестве части URL-адреса заключается в том, что кто-то может открыть страницу одного идентификатора объекта, передать форму другому, и этот объект будет перезаписан. Вот почему я пытаюсь использовать скрытое поле.

Проблема с хранением id в скрытом поле заключается в том, что при проверке формы Django жалуется, что объект не имеет уникального идентификатора (очевидно).

Второй вопрос : если уникальное поле является частью формы, как объяснить Django игнорировать тот факт, что этот ключ уже существует, чтобы обновить объект?

Почему бы вам просто не использовать ModelForm?

 # forms.py # ... class MyForm(forms.ModelForm): class Meta: model = MyModel # views.py # ... def my_view(request, id): instance = get_object_or_404(MyModel, id=id) form = MyForm(request.POST or None, instance=instance) if form.is_valid(): form.save() return redirect('next_view') return render(request, 'my_template.html', {'form': form}) 

Обновление для Django 1.6 и дальнейшая версия

 # forms.py # ... class MyForm(forms.ModelForm): class Meta: model = MyModel # views.py def my_view(request, id): instance = MyModel.objects.get(id=id) form = MyForm(request.POST or None, instance=instance) if form.is_valid(): form.save() return redirect('next_view') return direct_to_template(request, 'my_template.html', {'form': form}) 
  • Шаблоны Django: расширенная версия выбора
  • Как изменить виджет по умолчанию для всех полей даты Django в ModelForm?
  • Ввод формы входа в систему django на каждой странице
  • Группировка CheckboxSelectMultiple в шаблоне Django
  • Давайте будем гением компьютера.