2017-06-18 62 views
2

我一直在为这几天挣扎了好几天。 我想使用django-datatable-view的xeditable列整合。我的代码正确加载数据表(see here),但每当我指定make_xeditable列时,就会出现500内部服务器错误。我已经看过几页讨论django-datatable-view但没有讨论x-editable选项的页面(由于代表不够详细而无法发布链接)。Django-datatable-view X可编辑的内部服务器错误

使用在线实时演示(here)(版本0.7)中的代码片段不会执行任何操作。表格加载但列不可编辑。

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

我得到了最新版本(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警告:表id = DataTables_Table_0 - Ajax错误。有关此错误的详细信息,请参阅datatables.net/tn/7

只要服务器不返回一个2xx代码发送此弹出错误,因此,它基本上是因为下列位:

在控制台我得到一个500内部服务器错误(破坏堂妹链接数的):

jquery.min.js:4 GET ht__tp://127.0.0.1:8000 /价目表/画= 1 & column%5B0%5D%5Bdata%5D = 0 & columns%art = 0 & length = 25 &搜索%5Bvalue%5D = &搜索%5Bregex%5D =假& _ = 1497779941842 500(内部服务器错误)

我现在兜兜,我需要一些帮助。有人得到这个工作?

编辑: 我现在已将django-datatable-view降级到版本0.8,并使用了以下建议的语法,并且我也得到了SAME 500内部服务器错误。我怀疑我在某处丢失了一些必要的设置步骤,但是文档,比如它并没有说明什么。

回答

0

经过多次挫折和兜兜我放弃了Django的数据表视图。我无法将它用于内联编辑,这是我的主要要求。然后我发现django-inplaceedit。它有魅力,是我需要的一切。

我使我的表在模板中像这样:

{% extends "site_base.html" %} 


{% block more_extra_script %} 

    {% load inplace_edit %} 
    {% inplace_css 0 %} 
    {% inplace_js 1 0 %} 

{% endblock more_extra_script %} 


{% block content %} 

<div class="container-fluid"> 
    <p><a class="btn btn-default" href="{% url 'pricelist_list' %}">PriceList Listing</a></p> 

    <h2>Pricelist for {{ pricelist_date }}</h2> 
    <p>Double-click a price to edit it</p> 

    <table class="table table-responsive table-striped .table-bordered .table_hover"> 
     <thead class="info"> 
      <th>Product</th> 
      <th>Unit</th> 
      <th>Price</th> 
     </thead> 
     <tbody> 
      {% for prod in products %} 
       <tr> 
        <td>{{prod.product}}</td> 
        <td>{{prod.unit}}</td> 
        <td>{% inplace_edit "prod.price" %}</td> 
       </tr> 
      {% endfor %} 
     </tbody> 
    </table> 

</div> 
{% endblock %} 

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

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 %} 

{{数据表}}

{%端块%}

+0

我试过了,如上面在我的问题中所述。表格加载但列不可编辑。 – LumeShadow

+0

糟糕:忘记了页面初始化。请参阅上面的修改。 – mikep

+0

对不起,仍然载入表格,但列不可编辑... – LumeShadow