编辑和更新 HTML 数据表 Django
Posted
技术标签:
【中文标题】编辑和更新 HTML 数据表 Django【英文标题】:Edit and update HTML datatable Django 【发布时间】:2017-08-01 01:56:45 【问题描述】:我刚刚在 Django 1.10 中构建了一个系统,它基本上是一个用户可以填写并从订单中生成技术问题的表单。如下图所示:
问题提交到数据库后,下面的表格会显示所有问题:
这是我的模型:
class TechnicalValidationSystem(models.Model):
user = models.ForeignKey(User)
author = models.CharField(max_length=30)
soss = models.CharField(max_length=30)
case_opened = models.CharField(max_length=30)
cause_reason = models.CharField(max_length=35)
date_created = models.DateTimeField(blank=True, null=True)
comments = models.CharField(max_length=500)
issue_solved = models.BooleanField(default=False)
这是我的 html 表格:
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover dataTables-example" >
<thead>
<tr>
<th>SO-SS</th>
<th>Case Opened</th>
<th>Cause Reason</th>
<th>Comments</th>
<th>Date Created</th>
<th>Created by:</th>
<th>Issue Solved?</th>
</tr>
</thead>
<tbody>
% for linea in lineas_de_reporte %
<tr>
<td> linea.soss </td>
<td> linea.case_opened </td>
<td> linea.cause_reason </td>
<td> linea.comments </td>
<td> linea.date_created </td>
<td> linea.author </td>
<td> linea.issue_solved </td>
</tr>
% endfor %
</tbody>
</table>
</div>
我现在需要的是找到一种方法,主要是如果问题得到解决,用户可以修改此表,并使用该响应更新我的数据库。任何人都知道如何用 django 做到这一点?如果不是,可以使用 Jquery 或其他任何东西。
如果你们需要其他东西或者我错过了什么,请告诉我,感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:[更新]:在你的 HTML 中类似的东西
<div class="table-responsive">
<table class="..." >
<thead>
...
</thead>
<tbody>
% for linea in lineas_de_reporte %
<tr>
...
<td>
<form action="% url 'view_name' %" method="GET">
<input type="hidden" name="linea-id" value=" linea.id " />
<input type="submit" name="submit-issue-solved" value="Submit" />
</form>
</td>
</tr>
% endfor %
</tbody>
</table>
</div>
是的,这只能在 Django 中发生(如果你愿意,也可以在 jQuery 中发生)。
您应该将ISSUE RESOLVED?
列更改为每个单元格(当然使用% for %
循环)将包含两个单选按钮(Yes
和No
),一个隐藏的单选按钮(具有值的唯一键。我猜SOSS
在您的数据库表中是唯一的?)和收音机旁边的提交按钮。
然后,该表单应将自身(通过action=% url 'a_view_name_here' %
属性确定)提交给url
,并由view
处理。在该视图中,您可以获取用户选择的值(取决于使用的方法,即request.GET.get('issue_resolved')
或request.POST.get('issue_resolved')
)以及唯一值的值(即SOSS
)。
最后,您将对数据库进行查询以使用该SOSS
获取TechnicalValidationSystem
并更新其issue_resolved
布尔值(如下所示:
def issue_resolved(request):
# if GET data contain a key named 'linea-id'...
if request.GET.get('linea-id'):
# ... this means that user clicked on the submit button
# get the id of linea
linea_id = request.GET.get('linea-id')
# fetch object from db, based on that id (aka pk)
linea = TechnicalValidationSystem.objects.get(id=linea_id)
# change its attribute to True
linea.issue_resolved = True
# update db with the new value
linea.save(update_fields=['issue_resolved'])
return render(request, 'template/to/the/table.html', context_here)
【讨论】:
感谢您的解释,我的 SOSS 不是我的唯一密钥我将 ID 设置为默认值以跟踪案例。如何将列更改为表单?这意味着不需要调用 linea.issue_solved y 需要在那里配置一个单选按钮?我怎么做?抱歉,我是新手 :( 向我展示您展示表格的 HTML 文件 哪个ID?主键?您应该在模型字段中至少定义一个唯一字段。你必须选择一个独一无二的! 如果SOSS
在所有当前和未来的记录中都是唯一的,那么是的。如果不是,请选择另一个满足上述要求的。
是的,好的。你可以这样做。这是我的更新答案!以上是关于编辑和更新 HTML 数据表 Django的主要内容,如果未能解决你的问题,请参考以下文章