我的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>
答案 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参数的其余数据的表单将用户重定向到新页面,而不是使用仅包含名称的表单,并使用该名称预填充该表单页