Django编辑表单创建新实例

时间:2018-10-02 19:06:09

标签: 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"),
]

2 个答案:

答案 0 :(得分:0)

在看不到您的表单的情况下,我只能猜测没有任何填充edit_event_id,因此该表单被另存为新事件。当前,edit_event_id不是绑定字段,因此它不包含任何数据。

答案 1 :(得分:0)

好,所以我明白了,其他人都不可能得到它,因为代码中的问题比html中包含的问题还要严重。

我的错误是我在上次编辑后没有正确更改代码。还有一个打开的表单,我没有删除form标记的开头。

基本上,我不确定每个HTML标签都有一个打开和关闭标签。

这是正确的,上面的代码将可编辑条目:)