Django и Extjs, как использовать combo с jsonstore

#django #extjs #jsonstore

#django #extjs #jsonstore

Вопрос:

Я хочу отобразить комбинацию extjs с помощью сервера JSONStore, на стороне которого я использую python / Django.

Итак, это моя комбинация:

 xtype: 'combo',
store: new Ext.data.JsonStore({
    url: 'get_peoples',
    root: 'data',
    totalProperty: 'total',
    fields: [
        {name: 'name', mapping: 'fields.name'},
        {name: 'subname', mapping: 'fields.subname'}
    ],
    autoLoad: true
}),
trigerAction: 'all'
  

и views.py на стороне сервера:

 def get_peoples(request):
    queryset = People.objects.all()    
    data = '{"total": %s, "%s": %s}' % 
        (queryset.count(), 'data', serializers.serialize('json', queryset))
    return HttpResponse(data, mimetype='application/json')
  

вызов get_people дает мне

 {"total": 1, "data": [{"pk": 1, "model": "myapp.people", "fields": {"name": "Paul", "subname": "Di Anno"}}
  

Я думаю, что я делаю это неправильно, потому что в моем combo не отображается ни одного элемента

Ответ №1:

Вам нужно добавить объявления displayField и valueField в ваш ComboBox, чтобы он знал, какие поля из вашего хранилища использовать для любой роли. Кроме того, устанавливать автозагрузку в хранилище не обязательно.

 new Ext.form.ComboBox({
    xtype: 'combo',
    store: new Ext.data.JsonStore({
        url: 'get_peoples',
        root: 'data',
        totalProperty: 'total',
        fields: [
            {name: 'name', mapping: 'fields.name'},
            {name: 'subname', mapping: 'fields.subname'}
        ]
    }),
    triggerAction: 'all',

    // Just guessing at the proper fields here.
    // Set them to whatever you wish.
    displayField: 'name',
    valueField: 'subname'
});