将相关模型的方法放入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_name
和client__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并设置为索引[重复]