Django问题:保存有问题

Posted

技术标签:

【中文标题】Django问题:保存有问题【英文标题】:Django question: Having a problem with saving 【发布时间】:2011-02-27 14:17:16 【问题描述】:

您好,我有一个编辑项目表单。从这个角度看item.current_item_status_date

def edit_item(request, client_id = 0, item_id = 0):
    client = None
    item = None
    status = None
    contact = None
    status_id = request.POST.get('status_id', None)
    contact_id = request.POST.get('contact_id', None)
    save_item = request.POST.get('save_item', None)
    save_status = request.POST.get('save_status', None)

    try:
        client = models.Client.objects.get(pk = client_id)
        item = models.StorageItem.objects.get(pk = item_id)
    except:
        return HttpResponseNotFound()
    try:
        status = models.Status.objects.get(pk = status_id)
        contact = models.Contact.objects.get(pk = contact_id)
    except:
        pass
    if request.method == 'POST':
        form = forms.ItemForm(request.POST, instance = item)
        if form.is_valid() and save_item is not None:
            item.current_item_status_date = date.today()
            item.save()
            form.save(True)
            request.user.message_set.create(message = "Item 0 has been updated successfully.".format(item.tiptop_id))
            return HttpResponse("<script language=\"javascript\" type=\"text/javascript\">window.opener.location = window.opener.location; window.close();</script>")

        if status is not None and contact is not None and save_status is not None:
            current_status = models.ItemStatusHistory(item = item, contact = contact, status = status,
                                                    user = request.user)
            current_status.save()
            request.user.message_set.create(message = "Item status has been updated successfully.")
    else:
        form = forms.ItemForm(instance = item)
    title = str(client) + ' : Edit Item'
    status_list = models.Status.objects.all()
    return render_to_response('edit_item.html', 'form':form, 'title':title, 'status_list':status_list, 'item':item, context_instance = RequestContext(request))

current_item_status_date 在提交表单时保存今天的日期。但是,有一个小问题。在我的表单中,我只希望它在按钮名为 new status 时保存 被选中。现在我的编辑项表单正在做的是在选择 Save 按钮时进行保存。我希望我的表单仅在选择新状态时才保存此日期,而不是保存

这是我的编辑订单模板中的内容。

<td><input type="submit" name="save_status" value="new status"></td>
<input type="submit" name="save_item" value="Save" onclick="validate_item(this.form)">

编辑::我已经完成了这些更改。

#code

if request.method == 'POST':
    form = forms.ItemForm(request.POST, instance = item)
    if form.is_valid() and save_item is not None:
        form.save(True)
        request.user.message_set.create(message = "Item 0 has been updated successfully.".format(item.tiptop_id))
        return HttpResponse("<script language=\"javascript\" type=\"text/javascript\">window.opener.location = window.opener.location; window.close();</script>")
    if request.POST.get('save_status'):
        item.current_item_status_date = date.today()
        item.save()
#code

现在,通过这样做,当前项目状态日期确实得到保存。但只有当我关闭表单时(这是一个打开新窗口的表单)。当我选择状态日期然后单击保存时,它不会被保存。我认为它没有正确保存到 current_item_status_date 字段中,而不是数据库中。当我单击保存状态时,我可以看出它不起作用,字段 current_item_status 没有更新。只有当我关闭表单并再次打开它时它才会更新。唯一可行的方法是表单重新加载从数据库中获取信息。

这就是我要找的:

单击状态日期应保存日期。 单击状态日期,然后单击保存应保存日期。 仅单击保存不应保存状态日期。

【问题讨论】:

【参考方案1】:

您正在专门检查 save_item。将其更改为 save_status ,如果我理解您的问题,您应该没问题。

 if form.is_valid() and save_status is not None:

【讨论】:

这个问题是它影响current_status。不保存那部分。如果我做出这个改变。 然后将它移到您的 HttpResponse 块上方。【参考方案2】:

form = forms.ItemForm 中删除current_item_status_date 字段似乎有效。这样就可以正常保存了。

【讨论】:

以上是关于Django问题:保存有问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中保存数组数据?

django - 在保存之前比较新旧字段值

django 内联覆盖保存

如果没有给出图像,则 Django 模型函数保存图像字段 = 异常

Django:覆盖保存(模型或管理部分)

django保存错误