如何在不将其保存在Django中的情况下编辑对象

时间:2016-07-21 14:06:22

标签: python django django-forms

我的Django项目存在问题,当我添加一个对象后立即保存,之后我将被对象ID重定向到 server_edit ,我可以填充字段。如果我没有填写任何字段并按“返回”(转到上一页),即使未在模板上按保存按钮,也将保存浏览器按钮对象而不显示任何数据。

有没有办法不保存没有填充字段的对象?

如何在不保存的情况下编辑对象?

我的模型“服务器”包含一些CharField

mMap.setOnMarkerClickListener(this); // mMap is your GoogleMap instance

我添加并保存一个对象:

class Server(models.Model):
    name = models.CharField(max_length=256)

之后我重定向到编辑页面:

def server_add(request):
    server = Server()
    server.save()
    return HttpResponseRedirect(reverse('server:server_edit', args=(server.id,)))

将在html模板上编辑字段:

def server_edit(request, server_id):
    server = get_object_or_404(Server, pk=server_id)
    return render(request, 'server/server_edit.html'{'server': server})

此视图从模板中获取数据并允许编辑它们:

<form action="{% url 'server:server_edit_post' server.id %}"  method="post">
        {% csrf_token %}
    <tr>
        <td>{% trans "Name:" %}</td>
        <td><input type="text" name="name" maxlength="256" value="{{server.name}}" required></td>
    </tr>
     <button type="submit" class="btn btn-success">{% trans "Save" %}</button>
</form>

2 个答案:

答案 0 :(得分:1)

您应该避免保存对象,然后用不同视图中的数据填充它。

尝试使用通用编辑视图,例如CreateView / EditView或带有Django表单的FormView(https://docs.djangoproject.com/en/1.9/ref/class-based-views/generic-editing/)。

示例:

class ServerCreateView(CreateView):
    form_class = ServerCreateForm
    template_name = 'servers/add.html'

有了这个,所有验证都会自动完成。

答案 1 :(得分:0)

Http调用应该是无状态的。可以随时删除连接,这会使DB处于相同的不一致状态,这是您在此尝试避免的状态。您可以只使用以前输入的名称作为get参数的其余数据的表单将用户重定向到新页面,而不是使用仅包含名称的表单,并使用该名称预填充该表单页