Django 如何从数据库中获取数据并将其显示在表单中以更新内容

Django 如何从数据库中获取数据并将其显示在表单中以更新内容,django,forms,django-templates,Django,Forms,Django Templates,我有一个更新函数,允许用户使用django更新插入的记录。我试图根据id过滤对象。然后,一旦我返回id,我假设我能够获得所有字段 问题是,当我转到更新页面时,表单是空的,并且没有返回任何数据 views.py update.html {%extends“base.html”%} {%load static%} {%block body%} 欢迎 {{dbEntry.suspect_name} 编辑 清楚的 在django中,过滤器返回与过滤器匹配的元素的查询集。在本例中,您使用了过滤器,因此您的

我有一个更新函数,允许用户使用django更新插入的记录。我试图根据id过滤对象。然后,一旦我返回id,我假设我能够获得所有字段

问题是,当我转到更新页面时,表单是空的,并且没有返回任何数据

views.py update.html
{%extends“base.html”%}
{%load static%}
{%block body%}
欢迎
{{dbEntry.suspect_name}
编辑
清楚的

在django中,
过滤器
返回与过滤器匹配的元素的查询集。在本例中,您使用了
过滤器
,因此您的
dbEntry
是一个查询集。但如果这样做,则需要在模板中使用
for
循环来访问对象字段。在本例中,您需要使用
get
,它返回单个对象。您可以从中找到更多详细信息

所以只要改变一下:

dbEntry=suspect.objects.filter(pk=pk)

dbEntry=suspect.objects.get(pk=pk)
使用
get
时,需要小心异常。如果未找到任何对象,则您的
get
调用将抛出
DoesNotExist
。。类似地,如果您的
get
查询在找到多个元素时将抛出
MultipleObjectsReturn
异常

何时使用过滤器以及何时使用get?

这个问题没有严格的答案。当您希望通过元素的唯一字段(例如主键)获取元素时,可以使用
get
,因为您可以确定最多只能获取一个对象或没有对象(如果不存在)

如果您想获得对象列表(名为“Joe”的学生等),您需要使用
过滤器
。这将返回一个查询集,您可以通过在django模板中使用for循环迭代该查询集来显示该列表的元素,例如:

{%forobj在您的_objects%}
{{obj.name}
{%endfor%}

如果您尝试
dbEntry=suspect.objects.get(pk=pk)
而不是
dbEntry=suspect.objects.filter(pk=pk)
会发生什么情况?现在我可以获取与所选记录相关的所有字段了吗?并且能够更新数据,对吗?是的,通过使用
get
您将只拥有带有
pk
及其所有字段的记录。那么,您想使用get吗?什么时候使用过滤器?
def update(request,pk):
    #deny anonymouse user to enter the  create page
    if not request.user.is_authenticated:
        return redirect("login")
    else:
        dbEntry = suspect.objects.filter(pk =pk)
        print( "db entry : ",dbEntry)

        return render(request,'blog/update.html', {"dbEntry":dbEntry})
{% extends "base.html" %}
{% load static %}
{% block body %}


<head>
    <link rel="stylesheet" type="text/css" href="{% static '/css/linesAnimation.css' %}">
    <link rel="stylesheet" type="text/css" href="{% static '/css/input-lineBorderBlue.css' %}">
    <link rel="stylesheet" type="text/css" href="{% static '/css/dropDown.css' %}">
    <link rel="stylesheet" type="text/css" href="{% static '/css/home.css' %}">
    <link rel="stylesheet" type="text/css" href="{% static '/css/meta-Input.css' %}">
    <meta name= "viewport" content="width=device-width, initial-scale=1.0">
    <script type="text/javascript" src="{% static '/js/jquery-3.1.1.min.js'%}"></script>
    <title>Welcome</title>
</head>
<body>


    <div class="lines">
  <div class="line"></div><div class="line"></div>
  <div class="line"></div><div class="line"></div>
  <div class="line"></div><div class="line"></div><div class="line"></div>
  </div>
    <form enctype="multipart/form-data">
    <div id='left-column-Input' class="formInput" include="select()"> 
        <div class="forminputs">
        <input type="text" id="fname" name="fname" autocomplete="off" required />
        <label for="fname" class="label-name">
            <span class="content-name" name="fname">{{dbEntry.suspect_name}}</span>
        </label></div>
<div class="home-Button">
    <button id="save" name="save" type="submit">Edit</button>
    <button id="clear" name="clear" type="submit">Clear</button>
    </div>
    </div>