Python 当使用django表单将信息更新到数据库时,form.is_valid()无效吗

Python 当使用django表单将信息更新到数据库时,form.is_valid()无效吗,python,django,django-forms,Python,Django,Django Forms,所以我想用一个表单更新数据库中路由器的信息,我想用一个表单预先填充特定路由器的详细信息。问题是form.is_valid()不起作用 我尝试使用{{form.errors}{{form.non_field_errors}}和打印(form.errors),但都不起作用 views.py(不完整) forms.py class UpdateRouter(ModelForm): class Meta: model = Routers fields = ['mo

所以我想用一个表单更新数据库中路由器的信息,我想用一个表单预先填充特定路由器的详细信息。问题是form.is_valid()不起作用

我尝试使用{{form.errors}{{form.non_field_errors}}和打印(form.errors),但都不起作用

views.py(不完整)

forms.py

class UpdateRouter(ModelForm):
    class Meta:
        model = Routers
        fields = ['model', 'ip_addr', 'name', 'sn', 'mac']
模板

<form class="form-horizontal" action="" method="post">
  {% csrf_token %}
    <div class="form-group"> <!-- Form with the router details -->
      <label class="control-label col-sm-2" for="text">Serial number:</label>
      <div class="col-sm-10">
        <input type="text" class="form-control" id="text" name="sn" value="{{ router.sn }}" readonly>
      </div>
    </div>
    <div class="form-group">
      <label class="control-label col-sm-2" for="text">Model:</label>
      <div class="col-sm-10">
        <input type="text" class="form-control" id="text" value="{{ router.model }}" name="model" readonly>
      </div>
    </div>
    <div class="form-group">
      <label class="control-label col-sm-2" for="text">Ip address:</label>
      <div class="col-sm-10">
        <input type="text" class="form-control" id="text" value="{{ router.ip_addr }}" name="ip_addr">
      </div>
    </div>
    <div class="form-group">
      <label class="control-label col-sm-2" for="text">Name:</label>
      <div class="col-sm-10">
        <input type="text" class="form-control" id="text" value="{{ router.name }}" name="name">
      </div>
    </div>
    <div class="form-group">
      <label class="control-label col-sm-2" for="text">Mac address:</label>
      <div class="col-sm-10">
        <input type="text" class="form-control" id="text" value="{{ router.mac }}" name="mac">
      </div>
    </div>
    <div class="form-group">
        <label class="control-label col-sm-2" for="text">Extra info:</label>
        <div class="col-sm-10">
            <textarea class="form-control" name="extra_info" id="FormControlTextarea" rows="3">Example of some info</textarea>
        </div>
    </div>
    <div class="form-group" style="margin-top: 20px;">
      <div class="col-sm-offset-2 col-sm-10">
        <button type="submit" class="btn btn-primary">Update</button> <!-- Responsible for updating the router -->
        <a href="{% url "db_router" %}" class="btn btn-secondary">Cancel</a>
          <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#myModal" style="float: right"> <!-- Responsible for the delete modal to open -->
            Delete
          </button>
      </div>
    </div>
  </form>

{%csrf_令牌%}
序列号:
型号:
Ip地址:
姓名:
Mac地址:
额外信息:
一些信息的示例
更新
删除

您从未通过
请求.POST
请求.FILES
。如果要更新字段和文件,需要
form.save()
您的表单:

if request.method == 'POST':
    #Updating the form
    form = UpdateRouter(request.POST, request.FILES, instance=Routers.objects.get(sn=pk))
    print(form)
    print(form.errors)
    if form.is_valid():
        data = form.cleaned_data
        mac = data['mac']
        form.save()
        print(mac)
        return redirect('db_router')
    else:
        print("Invalid form")

您需要创建一个绑定表单

form = UpdateRouter(request.POST)
form=UpdateRouter(request.POST)将数据绑定到表单类。然后验证
使用的输入是有效的()

我应用了你所说的更改,form.is\u valid()现在是真的,但是现在我得到了这个“type object'UpdateRouter'没有属性'cleaned\u data'”@JoãoDias:是的,那应该是
form.cleaned\u data
:)所以我在这里得到了一个错误
rout=router.objects.get(sn=pk)
,所以我把它改成了`rout=get\u object\u或@404(Routers,sn=pk)``因此,即使详细信息正在更新(谢谢),当我单击更新按钮“未找到:/router\u info/db\u router”“没有路由器与给定查询匹配”时,仍然会出现错误。url保持如下“router\u info/db\u router”应该是db_路由器,这可能很简单,我是Django的乞丐,所以我想不出来xd@JoãoDias:您需要
重定向
,而不是
HttpResponseRedirect
<form enctype="multipart/form-data" class="form-horizontal" action="" method="post">
    <!-- -->
</form>
form = UpdateRouter(request.POST)