Перенос метода связанной модели в отдельный столбец jqgrid
Я использую Django 1.4 вместе с jqgrid
от django_gems
пакет Следующий код пытается принести 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
}
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 после получения данных с сервера и до их обработки. Таким образом, простым способом мы можем реализовать любой "виртуальный" столбец.