Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Datatables服务器端呈现Django ForeignKey关系_Python_Django_Ajax_Datatable_Datatables - Fatal编程技术网

Python 如何在Datatables服务器端呈现Django ForeignKey关系

Python 如何在Datatables服务器端呈现Django ForeignKey关系,python,django,ajax,datatable,datatables,Python,Django,Ajax,Datatable,Datatables,我被困了好几天,我正在使用这个插件,我需要在服务器端数据表中呈现ForeignKey相关的值,就像:{{data.pasien_id.name}在典型的django模板中。但是,这种方法不适用于服务器端数据表,并且没有任何文档可以实现这一点。代码如下所示 Models.py class Pasien(models.Model): nama = models.CharField(max_length=40, null=True) class Log_book(models.Model)

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

Models.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>

$(文档).ready(函数(){
$('#响应数据表x')。数据表({
// ...
搜索:是的,
处理:对,
服务器端:是的,
stateSave:没错,
“ajax”:“{%url'日志\u json%}”,
});
});

如果让JSON以平面结构(而不是嵌套结构)返回,则更容易:

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

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

还有其他方法可以达到同样的效果,请参考文档。关键是DataTables列定义必须与JSON中返回的内容匹配

一些提示:

  • 首先尝试让一列单独工作

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


  • 您好,所有列都呈现得很好,唯一的问题是当我需要嵌套视图时,上面的
    views.py
    django datatables视图
    的基本用法,不幸的是,没有关于如何实现这一点的其他文档像在普通
    django模板中那样的基本需求。
    {
    "name": name,
    "id": id
    }
    
    columns: [
    {
      "title": "Name",
      "data": "name",
      "render": {
          "_": "name",
      },
      "searchable": true,
      "orderable": true,
      "defaultContent": "N/A"
    }
    ]