我刚刚在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或其他任何东西。
如果你们需要别的东西,或者我错过了什么,请告诉我,谢谢你的时间。
答案 0 :(得分: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
)
最后,您将向数据库发出查询以获取TechnicalValidationSystem
SOSS
并更新其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)