如何在数据表服务器端呈现 Django ForeignKey 关系

Posted

技术标签:

【中文标题】如何在数据表服务器端呈现 Django ForeignKey 关系【英文标题】:How to Render Django ForeignKey relation on Datatables Serverside 【发布时间】:2021-02-27 19:06:14 【问题描述】:

我卡了好几天,我使用这个插件django-datatables-view,我需要在服务器端数据表中呈现 ForeignKey 相关值,就像:data.pasien_id.name 在典型的 django 模板中。但这种方式不适用于服务器端数据表,并且没有任何文档可以实现这一点。如下所示的代码。

模型.py

class Pasien(models.Model):
    nama = models.CharField(max_length=40, null=True)
 
class Log_book(models.Model):
    pasien = models.ForeignKey(Pasien, on_delete=models.PROTECT, null=True)

Views.py

 class logbook_json(BaseDatatableView):
    model = Log_book
    columns = ['id', 'pasien_id']
    order_columns = ['id','pasien_id']
    
  def render_column(self, row, column):
        if column == 'id':
            return escape('0'.format(row.id))
        else:
            return super(logbook_json, self).render_column(row, column)

    def filter_queryset(self, qs):
        filter_customer = self.request.GET.get('search[value]', None)
        if filter_customer:
            customer_parts = filter_customer.split(' ')
            qs_params = None
            for part in customer_parts:
                q = Q(id__icontains=part) | Q(pasien_id__icontains=part)
                qs_params = qs_params | q if qs_params else q
            qs = qs.filter(qs_params)
        return qs

templates.html 数据表加载,

<script class="init" type="text/javascript">
    $(document).ready(function () 
        $('#responsive-datatablex').DataTable(
        // ...
        searching: true,
        processing: true,
        serverSide: true,
        stateSave: true,
        "ajax": "% url 'logbook_json' %",
    );
    );
</script>

【问题讨论】:

【参考方案1】:

如果让 JSON 以扁平结构(而不​​是嵌套)返回会更容易:


"name": name,
"id": id

然后您需要为该列定义data 以从 JSON 中读取值。这可能非常棘手,因此仔细阅读文档是值得的。

您必须正确定义数据表列,以便它可以读取此数据。请注意,有"orthogonal" 数据类型(即用于排序、显示等):

columns: [

  "title": "Name",
  "data": "name",
  "render": 
      "_": "name",
  ,
  "searchable": true,
  "orderable": true,
  "defaultContent": "N/A"

]

还有其他实现相同的方法,因此请参阅文档。关键是 DataTables 列定义必须与 JSON 中返回的内容匹配。

一些提示:

    先尝试让一列自行工作。

    在单独的选项卡中加载 JSON,以便您可以看到它正在正确呈现。请注意,有一些关于呈现服务器端响应的特定规则,我希望 django-datatables-view 遵守这些规则,但我没有检查。

【讨论】:

你好,所有列都渲染得很好,只有当我需要嵌套视图时才有问题,上面的views.pydjango-datatables-view的基本用法,不幸的是,没有其他文档说明如何实现这一点像平常一样的基本需求django template.

以上是关于如何在数据表服务器端呈现 Django ForeignKey 关系的主要内容,如果未能解决你的问题,请参考以下文章

将带有外键的自定义标签呈现到模板问题中

如何使用 Django-filter 过滤多个字段?

Instagram 在使用 Django 时如何在服务器上呈现 React 视图? [关闭]

如何在同一GET请求中呈现文件并将数据发送到页面

Django ORM - 模型引用另一个模型ManyToMany字段

如何在服务器端呈现的 React 应用程序中构造多个 HTTP 请求?