将相关模型的方法放入jqgrid的单独列中

Posted

技术标签:

【中文标题】将相关模型的方法放入jqgrid的单独列中【英文标题】:Taking method of the related model into a separate column of jqgrid 【发布时间】:2012-03-24 20:12:20 【问题描述】:

我正在使用 django 1.4 和来自 django_gems 包的 jqgrid 以下代码试图通过连接名字和姓氏将virtual 列带到grid 上。

但是它失败了

无法将关键字client__get_fullname 解析为字段。

有什么可以接受的方法来达到这个目的吗?

 class Car(models.Model):
     number = models.CharField(max_length = 50)
 client = models.ForeignKey('Client')

 class Client(models.Model):
     first_name = models.CharField(max_length = 50)
 last_name = models.CharField(max_length = 50)
 def get_fullname(self):
     return '%s %s' % (self.first_name, self.last_name)

 from django_gems.jqgrid
 import JqGrid
 class CarGrid(JqGrid):
     queryset = Car.objects.all()
 fields = ['number', 'client__get_fullname']

 jqgrid config = 
     "altRows": true,
     "rowList": [10, 25, 50, 100],
     "sortname": "id",
     "viewrecords": true,
     "autowidth": false,
     "forcefit": false,
     "shrinkToFit": false,
     "height": "auto",
     "colModel": [
         "index": "id",
         "editable": false,
         "name": "id",
         "label": "ID"
     , 
         "index": "number",
         "editable": false,
         "name": "number",
         "label": "number"
     , 
         "index": "first_name",
         "editable": false,
         "name": "client__first_name",
         "label": "first name"
     ],
     "caption": "Cars",
     "datatype": "json",
     "gridview": true,
     "sortorder": "asc",
     "viewsortcols": true,
     "url": "main/examplegrid",
     "rowNum": 10,
     "pager": "#pager",
     "jsonReader": 
         "repeatitems": false
     
 

 sample data = 
     "total": 1,
     "records": 1,
     "rows": [
         "client__first_name": "Bill",
         "client__last_name": "Clinton",
         "id": 1,
         "number": "111222"
     ],
     "page": 1
 

【问题讨论】:

您可以在beforeProcessing 事件中填写在客户端的“虚拟”列。如果您将问题附加到 javascript 中的 jqGrid 定义和将发布到客户端的 JSON 数据(至少一行),我会更详细地向您展示如何做到这一点。 给你。使用示例数据进行配置。 【参考方案1】:

好的!让我们获取 JSON 数据


    "total": 1,
    "records": 1,
    "rows": [
        
            "client__first_name": "Bill",
            "client__last_name": "Clinton",
            "id": 1,
            "number": "111222"
        
    ],
    "page": 1

jqGrid 包含一个额外的列

name: "client__full_name", label: "full name"

应该由client__first_nameclient__last_name 构造。在这种情况下,最简单的方法是使用beforeProcessing 回调函数:

$("#list").jqGrid(
    url: "main/examplegrid",
    datatype: "json",
    colModel: [
        name: "id", label: "ID",
        name: "client__first_name", label: "first name",
        name: "client__last_name", label: "last name",
        name: "client__full_name", label: "full name"
    ],
    gridview: true,
    jsonReader:  repeatitems: false ,
    //... other parameters
    beforeProcessing: function (data) 
        var items = data.rows, n = items.length, i, item;
        for (i = 0; i < n; i++) 
            item = items[i];
            item.client__full_name = item.client__first_name + ' ' +
                item.client__last_name;
        
    
);

回调函数beforeProcessing会在从服务器接收到数据之后,在数据处理之前被jqGrid调用。因此,我们可以通过简单的方式实现任何“虚拟”列。

【讨论】:

这很好用。谢谢奥列格。如何让工具栏搜索与此虚拟列一起使用? @user537723:不客气!一切都与在标准列中搜索的情况完全相同。您应该只扩展您的服务器代码以分析“client__full_name”作为输入字段。

以上是关于将相关模型的方法放入jqgrid的单独列中的主要内容,如果未能解决你的问题,请参考以下文章

如何将两列中的日期和时间放入pandas to_datetime并设置为索引[重复]

在Eloquent中获取相关模型列中最常见的值

如何将复杂的代码顺序放入模型中?

通过两个具有相关日期的模型来查看 MVC4

我正在尝试将相关表的数据放入 Django Rest Framework 中的列表序列化程序中

如何从页面SQL语句进行相关后台查询