Django 如何从数据库中获取数据并将其显示在表单中以更新内容
我有一个更新函数,允许用户使用django更新插入的记录。我试图根据id过滤对象。然后,一旦我返回id,我假设我能够获得所有字段 问题是,当我转到更新页面时,表单是空的,并且没有返回任何数据 views.py update.htmlDjango 如何从数据库中获取数据并将其显示在表单中以更新内容,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中,过滤器返回与过滤器匹配的元素的查询集。在本例中,您使用了过滤器,因此您的
{%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>