python - Django 编辑表单创建新实例
问题描述
我正在创建一个表单,允许用户编辑保存到 django 数据库的事件。问题是当它运行代码时,在数据库中创建了一个新实例,旧实例保留在数据库中,然后两者都可以在站点中查看
下面是(部分)用于调用编辑视图和编辑数据库中的实例的 HTML 表单
<div class="modal-footer">
<form action="edit/" method="POST">
{% csrf_token %}
<input type="hidden" name="event_edit_id" id="event_edit_id">
<input class="btn btn-primary btn-block" type="submit" value="Save Changes"/>
</form>
</div>
接下来是用于编辑随表单发送的 id 的事件的视图:
def edit(request):
if request.method == "POST":
event_id = int(request.POST.get('event_edit_id'))
event = Events.objects.get(pk=event_id)
form = AddEventForm(request.POST or None, instance=event)
if form.is_valid():
form.save()
return redirect('calendar')
我知道我错过了一些东西,但我只是看不到它,任何帮助表示赞赏!
编辑 我注意到,当提交代码进行编辑时,它直接进入 /calendar/ 而不是 /calendar/edit 所以这是我用来映射文件的 urls 文件
urlpatterns = [
path('', views.calendar, name="calendar"),
path('delete/', views.delete, name="delete"),
path('edit/', views.edit, name="edit"),
]
解决方案
没有看到你的表单,我只能猜测没有任何填充edit_event_id
,所以表单被保存为一个新事件。目前,edit_event_id
不是绑定字段,因此它不包含任何数据。
推荐阅读
- java - 谓词拆分和并行处理
- php - 将两个不同的对象放在一起
- angular - 如何删除 Apollo-Angular 及其所有依赖项?
- javascript - 原型函数和普通函数的不同输出
- splunk - Splunk 警报创建
- javascript - Knex.js 迁移问题:因`关系“knex_migrations”不存在而失败`
- python - scipy.signal.firwin 低通滤波器的作用类似于高通滤波器
- flutter - 在 wifi 信号强度、哔声等颤动的同时播放声音背景
- c# - 如果登录时角色更改,如何更新权限?
- node.js - 如何在 VS Code 中将终端更改为节点?(LInux mint)