Как обновить объект из формы редактирования в Django?
Возможно, вопрос новичков, поэтому, пожалуйста, несите меня.
У меня есть форма Django, которая редактирует определенный экземпляр модели. Чтобы узнать, какой объект редактируется, у меня есть скрытое поле, содержащее идентификатор объекта, а также URL-адрес, содержащий идентификатор.
Первый вопрос : имеет ли идентификатор объекта в скрытом поле правильный способ его выполнения?
- Выпадающее меню Страна / Штат / Город внутри встроенного администратора Django
- пользовательские сообщения об ошибках с формой модели
- Django Forms: если недействительно, показать форму с сообщением об ошибке
- Несколько classов форм в джинго общих (classных) представлениях
- Применение стилей загрузки для django-форм
Моя (возможно, необоснованная) озабоченность тем, что она только в качестве части URL-адреса заключается в том, что кто-то может открыть страницу одного идентификатора объекта, передать форму другому, и этот объект будет перезаписан. Вот почему я пытаюсь использовать скрытое поле.
Проблема с хранением id в скрытом поле заключается в том, что при проверке формы Django жалуется, что объект не имеет уникального идентификатора (очевидно).
Второй вопрос : если уникальное поле является частью формы, как объяснить Django игнорировать тот факт, что этот ключ уже существует, чтобы обновить объект?
- Как я могу ограничить GenericForeignKey Django списком моделей?
- Получить вид виджета формы Django из шаблона
- Загрузка файла Django JQuery Ajax
- resize изображения при сохранении
- Проверка встроенной формы в Django
- Каков наилучший способ хранения номера телефона в моделях Django
- Кассовые ячейки выбора Django / jQuery?
- В Django, как вы передаете ForeignKey в экземпляр модели?
Почему бы вам просто не использовать 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})