尝试在django-tables2表中显示JSON数据的问题

时间:2018-04-08 18:17:47

标签: json django django-tables2

我有django-tables2设置并且运行良好。我已将表设置为能够直接从显示的列表中更新复选框列。但是,当我显示的表格分页并更新一个值时,它会刷新整个页面,从而将我发送回第一页,然后我必须单击“下一步”才能返回到我所在的位置。因此我认为将knockout.js放入混合中以将我的各个列绑定到postgres数据库中的相应数据可能是个好主意。根据模糊,这将允许我简单地刷新点击的项目而无需刷新整个页面。我阅读了knockout.js的教程,看起来很棒,而且正是我要找的。我修改了我的观点并编写了我的js文件等,我几乎就在那里。我有来自views.py的JSONResponse返回正确的行数,但是,我的django-tables2表将每个记录渲染为我的表中的标题(即th)而不是数据作为行(即td)。感觉就像我在最后一道障碍中摔倒一样,我想知道是否有人可以解释我如何解决这个难题的最后一点。

view.py

def mydatalist(request):
    data = []
    user = get_current_user()
    query = Q(user_fkey=user.id)
    query.add(Q(deleted__isnull=True), Q.AND)
    query.add(Q(master=True), Q.AND)
    tasks = Task.objects.filter(query)
    for task in tasks:
        data.append({"code":task.code, "name":task.name, etc}) 
    return JsonResponse(data, safe=False)

我的.js文件

function Task(data) {
    this.code = ko.observable(data.code);
    this.name = ko.observable(data.name);
    etc 
}
function TaskListViewModel() {
    // Data
    var self = this;
    self.tasks = ko.observableArray([]);
    $.getJSON('http://myweb.org/tasks/mydatalist/', function (data) {
        if(data){
            var mappedTasks = $.map(data, function (item) {           
                return new Task(item);
            });
        } else {
           alert('data empty!'); 
        }
        self.tasks(mappedTasks);          
    });
}

ko.applyBindings(new TaskListViewModel());

我的django-tables2 tables.py文件

class MasterTable(ColumnShiftTable):    
    code = tables.Column(attrs={'th':{'class':'centered nodec'}})
    name = tables.LinkColumn(attrs={'th':{'class':'centered nodec'}})
    etc

    class Meta:
        model = Task        
        fields = ('code','name', etc)
        template_name = 'django_tables2_column_shifter/bootstrap3.html'
        attrs={'id':'masterlist', 'class': 'table table-noborder', 'data-bind': 'foreach: tasks, visible: task().length > 0'}
        row_attrs={'id': lambda record: record.pk}

所以基本上一切都很有效,除了渲染时,我的django-tables2表渲染了11个标题而没有数据行而不是1个标题和10个数据行。

如果有人可以放弃任何光线,我真的很感激它,或者如果有人可以提出另一种方法来实现不必每次刷新整个页面,那也会很棒。

0 个答案:

没有答案