0

グリッドを使用して在庫予約のデータを表示したいと考えています。予約ごとに、タイプ、数量、予約日を表示したいと思います。複数のタイプの予約が存在する可能性があり、タイプの定義は関連するテーブルに保存されます。

関連テーブル fk のフィールドをグリッドに表示しようとしましたが、グリッド列は空のままです。grid.py で、フィールド type__typename フィールドを定義し、グリッドに列を取得しますが、データは取得しません。id、quantity、reservationdate フィールドがグリッドに正しく表示されます。

ソースから理解できる限り、関数 lookup_foreign_key_field の jqgrid.py では、グリッド クラスのフィールドに fk__field という名前を付ける必要があります。

Django 1.5、jquery-1.9.1、およびpostgesql 9.2を使用しています

アイデアや提案は大歓迎です。

grid.py

class StockReservationsGrid(JqGrid):
    model = StockReservations # could also be a queryset
    fields = ['id', 'type__typename','quantity', 'reservationdate'] # optional     
    caption = 'Reservations' # optional
    colmodel_overrides = {
        "id": { "editable": False, "width":10, "rowNum": 5, },  
        "type__typename": {'index': 'type__typename', 'label':'Type'},
    }

    def __init__(self, request, stockitem_id):
        super(StockReservationsGrid, self).__init__()
        self.queryset = StockReservations.objects.filter(
            type__isnull=False,warehouse__isnull=False, stockitem_id=stockitem_id)
        self.url = reverse_lazy('stock_reservations_grid', args = [stockitem_id])

ビュー.py

def stock_reservations_grid(request, stockitem_id):
    grid = StockReservationsGrid(request, stockitem_id)
    return HttpResponse(grid.get_json(request), mimetype="application/json") 

def stock_reservations_grid_config(request, stockitem_id):
    # build a config suitable to pass to jqgrid constructor   
    grid = StockReservationsGrid(request, stockitem_id)
    return HttpResponse(grid.get_config(), mimetype="application/json")    

urls.py

urlpatterns = patterns('Warehouse.views',       
    url(r'^stock_reservations_grid/(?P<stockitem_id>\d+)/$', 
        stock_reservations_grid, 
        name='stock_reservations_grid'),
    url(r'^stock_reservations_grid/cfg/(?P<stockitem_id>\d+)/$', 
        stock_reservations_grid_config, 
        name='stock_reservations_grid_config'),           
)

JavaScript

<script type="text/javascript">
$(document).ready(function() {
    $.getJSON("{% url "stock_reservations_grid_config" stockitem.id %}", function(data){
        $("#deliverydata_grid")
            .jqGrid(data)
            .navGrid('#deliverydata_pager', 
                {add: false, edit: false, del: false, view: true},
        {}, // edit options
        {}, // add options
        {}, // del options 
        { multipleSearch:true, closeOnEscape:true }, // search options 
        { jqModal:false, closeOnEscape:true} // view options 
        );
    });
});
</script>  

データ

{"rowList": [10, 25, 50, 100], 
 "sortname": "id", 
 "viewrecords": true, 
 "autowidth": true, 
 "shrinkToFit": true, 
 "height": "auto", 
 "gridview": true, 
 "sortorder": "asc", 
 "rowNum": 10, "pager": "#pager", 
 "jsonReader": {"repeatitems": false}, 
 "altRows": true, 
 "caption": "Reservations", 
 "datatype": "json", 
 "rownumbers": false, 
 "forcefit": true, 
 "url": "/warehouse/reservations/stock_reservations_grid/147/", 
 "colModel": [{"index": "id", 
               "name": "id", 
               "width": 10, 
               "rowNum": 5, 
               "editable": false, 
               "label": "ID"}, 
              {"index": "type__typename", 
               "name": "type__typename", 
               "editable": true, 
               "label": "Type"}, 
              {"index": "quantity", 
               "editable": true, 
               "name": "quantity", 
               "label": "quantity"},
              {"index": "reservationdate", 
               "editable": true, 
               "name": "reservationdate", 
               "label": "reservationdate"}]}

models.py

class STB():
    warehouse = models.ForeignKey('Warehouse.Warehouse', null=True)
    stockitem = models.ForeignKey('Stockitems.Stockitems', null=True)
    quantity = models.DecimalField(max_digits=14, decimal_places=2, default=0) 
    transactiondate = models.DateTimeField(default=datetime.datetime.now(EST()))  

    class Meta:
        abstract = True

 class StockresTypes():
        typeno = models.IntegerField(unique=True)
        typename = models.CharField(max_length=100)

        def __unicode__(self):            
                return u'%s %s' % (self.typeno, self.typename)

class Meta:        
    ordering = ['typename']    
    app_label = 'Warehouse'        

class StockReservations(STB):
    type = models.ForeignKey('StockresTypes', null=True, db_index=True)
    reservationdate = models.DateTimeField(default=datetime.datetime.now(EST()))
    sourceid = models.IntegerField(default=0, db_index=True)


    def __unicode__(self):            
        return u'%s %s %s %s' % (
            self.type, self.warehouse, self.stockitem, self.reservationdate)

    class Meta:
        ordering = ['reservationdate', 'warehouse', 'stockitem']    
        app_label = 'Warehouse'   

json.json

 {"rows": [{"transactiondate": "2013-05-09T16:51:52.191Z", 
            "stockitem_id": 2812, 
            "id": 2169, 
            "type_id": 1, 
            "reservationdate": "2009-04-17T22:00:00Z", 
            "warehouse_id": 56, 
            "quantity": "2.00"}], 
            "total": 1, "page": 1, "records": 1}
4

1 に答える 1

0

django gems パッケージにバンドルされている jqgrid を使用して、同様の問題を解決することができました: http://plfiorini.github.io/django-gems/ダウンロードして解凍し、実行するだけです。

python setup.py インストール

次に、grids.py で古い jqgrid インポートを削除し、django gems by の jqgrid を使用しfrom django_gems.jqgrid import JqGridます。これで、Json に外部キー データが含まれているはずです。

于 2013-05-25T20:10:25.063 に答える