2012-03-24 27 views
1

我将django 1.4与来自django_gems包的jqgrid一起使用 下面的代码试图通过连接名字和姓氏来将“虚拟”列引入网格。然而,它无法解析关键字'client__get_fullname'到字段中。“将相关模型的方法放入jqgrid的单独列中

有没有什么可以接受的方法来实现这个目标?

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配置= { “altRows”:真 “rowList”:[10,25,50,100], “sortname”: “ID”, “viewrecords”:真 “autowidth”:假,“forcefit”:false,“shrinkToFit”:false,“height”:“auto”,“colModel”:[{“index”:“id”,“editable”:false,“name”:“id”标签“:”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}}

样本数据= {“总数”:1,“r ecords“:1,”rows“:[{”client__first_name“:”Bill“,”client__last_name“:”Clinton“,”id“:1,”number“:”111222“}],”page“:1}

+0

您可以在[beforeProcessing](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events#list_of_events)事件中的客户端**内填充“虚拟”列** 。如果你想用jqGrid定义在JavaScript中附加你的问题,并用JSON数据(至少一行)附加到客户端,我会告诉你更详细的方法。 – Oleg 2012-03-24 20:29:52

+0

你在这里。配置示例数据。 – user537723 2012-03-24 21:11:02

回答

2

OK!让我们你的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的从服务器和数据将被处理之前接收到数据后调用。所以以简单的方式,我们可以实现任何“虚拟”列。

+0

这工作正常。谢谢奥列格。如何使工具栏搜索与这个虚拟列一起工作? – user537723 2012-03-26 17:04:03

+0

@ user537723:不客气!所有工作都与在标准列中搜索的情况完全相同。您应该扩展您的服务器代码以分析“client__full_name”作为输入字段。 – Oleg 2012-03-26 17:07:37

相关问题