编辑和更新 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 % 循环)将包含两个单选按钮(YesNo),一个隐藏的单选按钮(具有值的唯一键。我猜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的主要内容,如果未能解决你的问题,请参考以下文章

表中的Django数据更新

Django 编辑表单数据:数据被复制而不是被更新

单击并在数据库中更新时在 Django 中编辑表单字段

如何预填充 Django 更新表单并将其写回数据库

Django-2

Django没有将表单提交到数据库