Django 将相关模型的方法放入jqgrid的单独列中
我正在使用django 1.4和Django 将相关模型的方法放入jqgrid的单独列中,django,orm,jqgrid,Django,Orm,Jqgrid,我正在使用django 1.4和django_gems包中的jqgrid 下面的代码试图通过连接名字和姓氏将virtual列带到网格中 然而,它失败了 无法将关键字客户端\u获取\u全名解析到字段中 有什么可以接受的方法来实现这一点吗 class Car(models.Model): number = models.CharField(max_length = 50) client = models.ForeignKey('Client') class Client(model
django_gems
包中的jqgrid
下面的代码试图通过连接名字和姓氏将virtual
列带到网格中
然而,它失败了
无法将关键字客户端\u获取\u全名
解析到字段中
有什么可以接受的方法来实现这一点吗
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
}
好的!让我们来获取JSON数据
{
“总数”:1,
“记录”:1,
“行”:[
{
“客户名”:“账单”,
“客户姓氏”:“克林顿”,
“id”:1,
“编号”:“111222”
}
],
“第页”:1
}
jqGrid还包含一个附加列
{name: "client__full_name", label: "full name"}
它应该由客户名和客户姓构成。在这种情况下,最简单的方法是使用回调函数:
$("#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;
}
}
});
$(“#列表”).jqGrid({
url:“主/示例网格”,
数据类型:“json”,
colModel:[
{名称:“id”,标签:“id”},
{name:“客户名”,标签:“first name”},
{name:“客户姓氏”,标签:“姓氏”},
{name:“客户全名”,标签:“全名”}
],
gridview:没错,
jsonReader:{repeatitems:false},
//…其他参数
预处理前:函数(数据){
var items=data.rows,n=items.length,i,item;
对于(i=0;i
jqGrid将在从服务器接收到数据后和处理数据之前调用回调函数beforeProcessing
。因此,我们可以通过简单的方式实现任何“虚拟”列。您可以在事件内部的客户端上填写“虚拟”列。如果您将问题附加到JavaScript中的jqGrid定义和JSON数据(至少一行),这些数据将发布到客户端,那么我将向您展示更详细的方法。使用示例数据进行配置。这很好。谢谢你,奥列格。让工具栏搜索与这个虚拟列一起工作怎么样?@user537723:不客气!所有操作与在标准列中搜索时完全相同。您只需扩展服务器代码,以分析“客户机全名”作为输入字段。