问题描述
我正在使用 django 1.4 和 django_gems
包中的 jqgrid
以下代码试图通过连接名字和姓氏将 virtual
列带到 grid
上.
I am using django 1.4 together with jqgrid
from django_gems
packageThe following code is trying to bring the virtual
column onto the grid
by concatenating first and last name.
但是它失败了
无法将关键字 client__get_fullname
解析为字段.
有什么可以接受的方法来达到这个目的吗?
Is there any acceptable way to achieve this?
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 数据
OK! Let us you get the JSON data
{
"total": 1,
"records": 1,
"rows": [
{
"client__first_name": "Bill",
"client__last_name": "Clinton",
"id": 1,
"number": "111222"
}
],
"page": 1
}
jqGrid 包含一个额外的列
and the jqGrid contains an additional column
{name: "client__full_name", label: "full name"}
应该由 client__first_name
和 client__last_name
构成.在这种情况下,最简单的方法是使用 beforeProcessing 回调函数:
which should be constructed from client__first_name
and client__last_name
. In the case the most simplest way would be to use beforeProcessing callback function:
$("#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调用.因此,我们可以通过简单的方式实现任何虚拟"列.
The callback function beforeProcessing
will be called by jqGrid after the data are received from the server and before the data will be processed. So in the simple way we can implement any "virtual" column.
这篇关于将相关模型的方法放到jqgrid的单独列中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!