Django-datatable-view X-editable内部服务器错误

时间:2017-06-18 10:40:10

标签: django datatables x-editable

我几天来一直在努力解决这个问题。 我想使用django-datatable-view的xeditable列集成。我的代码正确加载了数据表(see here),但每当我指定make_xeditable列时,我都会收到500 Internal Server错误。我查看了几个页面(由于没有足够的代表而无法发布链接...),讨论了django-datatable-view,但没有一个讨论x-editable选项。

使用在线直播演示(here)(版本0.7)中的片段不做任何事情。表格加载但列不可编辑。

class PriceListDataTableView(XEditableDatatableView):
    model = PriceList
    datatable_options = {
        'columns': [
            'id',
            'date',
            'product',
            'unit',
            ("Price", 'price', helpers.make_xeditable),
        ]
}

我在我的localhost上运行了最新版本(0.9),他们的示例正常运行!但我不能让它在我自己的应用程序中工作。两个设置都运行django 1.8

这是我的模特:

class PriceList(models.Model):

    # Fields
    date =    models.DateField(verbose_name="Price list date")
    product = models.CharField(verbose_name="Product name", max_length=100)
    unit =    models.CharField(verbose_name="Unit", max_length=6)
    price =   models.DecimalField(verbose_name="Price", decimal_places=2, 
              max_digits=10)

这是我的模板:

{% extends "agrichem/base.html" %}
{% block content %}

<script>
$(document).ready(function() {
    <!-- Initialization for x-editable tables -->
    $.fn.editable.defaults.mode = 'inline';
    $(function(){
        var xeditable_options = {};
        datatableview.initialize($('.datatable'), {
               fnRowCallback: datatableview.make_xeditable(xeditable_options),
        });

    });
});
</script>

{{ datatable }}

{% endblock %}

以下是我的观点:

class PriceListDataTableView(XEditableDatatableView):
    model = PriceList

    class datatable_class(Datatable):
        class Meta:
            columns = ['id', 'date', 'product', 'unit', 'price']
            processors = {
                'price': helpers.make_xeditable,

            }

如果我删除processors块,我的表会加载,但不能编辑。有了它,我会弹出一个说:

  

DataTables警告:table id = DataTables_Table_0 - Ajax错误。有关此错误的更多信息,请参阅datatables.net/tn/7

每当服务器没有返回2xx代码时,就会发送此弹出错误,因此它基本上是由于以下位而发生的:

在控制台中,我收到500内部服务器错误(破坏链接计数):

  

jquery.min.js:4 GET ht__tp://127.0.0.1:8000 / pricelist /?draw = 1&amp; columns%5B0%5D%5Bdata%5D = 0&amp; columns%art = 0&amp; length = 25&amp; search%5Bvalue%5D =&amp; search%5Bregex%5D = false&amp; _ = 1497779941842 500(INTERNAL SERVER ERROR)

我现在进入圈子,我需要一些帮助。有人这个有用吗?

编辑: 我现在已将django-datatable-view降级到版本0.8,并使用下面建议的语法,我也得到了SAME 500 Internal Server错误。我怀疑我在某个地方缺少一些重要的设置步骤,但文档,例如它,并没有说明什么。

2 个答案:

答案 0 :(得分:0)

尝试

class PriceListDataTableView(XEditableDatatableView):
    model = PriceList
    datatable_options = {
        'columns': [
            'id',
            ("Price", 'price', helpers.make_xeditable),
            ...
        ]
    }

编辑:您还需要页面级初始化:

// Page javascript
datatableview.auto_initialize = false;
$(function(){
    var xeditable_options = {};
    datatableview.initialize($('.datatable'), {
        fnRowCallback: datatableview.make_xeditable(xeditable_options),
    });
})

编辑:模板中缺少csrf标记,转载如下:

{% extends "agrichem/base.html" %}
{% block content %}

<script>
$(document).ready(function() {
    <!-- Initialization for x-editable tables -->
    $.fn.editable.defaults.mode = 'inline';
    $(function(){
        var xeditable_options = {};
        datatableview.initialize($('.datatable'), {
           fnRowCallback: datatableview.make_xeditable(xeditable_options),
        });

    });
});
</script>

该行是

{% csrf_token %}

{{datatable}}

{%endblock%}

答案 1 :(得分:0)

经过多次挫折并进入圈子后,我放弃了django-datatable-view。我无法让它用于内联编辑,这是我的主要要求。

然后我找到django-inplaceedit。它有魅力,是我需要的一切。

我在模板中渲染我的表格如下:

[ '15, -28.,         -30.\n']

这个应用程序的美妙之处在于它透明地处理所有服务器端的东西。双击该字段,更改它,按Enter键,数值将在数据库中更新。