如何在数据表服务器端呈现 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.py
是django-datatables-view
的基本用法,不幸的是,没有其他文档说明如何实现这一点像平常一样的基本需求django template.
以上是关于如何在数据表服务器端呈现 Django ForeignKey 关系的主要内容,如果未能解决你的问题,请参考以下文章
Instagram 在使用 Django 时如何在服务器上呈现 React 视图? [关闭]