2012-03-24 4 views
1

django_gemsパッケージのjqgridと共にdjango 1.4を使用しています 次のコードは、姓と名を連結してグリッドに "仮想"列を配置しようとしています。しかし、 "'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":偽"id"、 "編集可能": "false"、 "name": "id"、 " 「番号」、「番号」、「編集可能」:偽、「名前」:「番号」、「ラベル」:「番号」}、{「索引」:「first_name」、キャプション ":"車 "、"データ型 ":" json "、" gridview ":true、" sortorder ":" true "、" editable ":false、" name ":" client__first_name " "asc"、 "viewsortcols":true、 "url": "main/examplegrid"、 "rowNum":10、 "pager": "#pager"、 "jsonReader":{"repeatitems":false}}

サンプルデータ= {"合計":1、 "r 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)イベントの内側で、クライアント側**の「仮想」列**を入力することができます。 。 JavaScriptにjqGrid定義を追加し、クライアントに投稿されるJSONデータ(少なくとも1行)を追加する場合は、これをどのように行うことができるかを詳しく説明します。 – Oleg

+0

ここに行きます。サンプルデータで設定します。 – user537723

答えて

2

OK!あなたは

{ 
    "total": 1, 
    "records": 1, 
    "rows": [ 
     { 
      "client__first_name": "Bill", 
      "client__last_name": "Clinton", 
      "id": 1, 
      "number": "111222" 
     } 
    ], 
    "page": 1 
} 

JSONデータを取得し、jqGridはclient__first_nameclient__last_nameから構成されなければならない追加の列

{name: "client__full_name", label: "full 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

+0

@ user537723:ようこそ!すべては、標準列で検索する場合とまったく同じです。入力フィールドとして "client__full_name"を分析するためにサーバーコードを拡張するだけです。 – Oleg

関連する問題