我在配置 django-rest-framework-datatables 时是否遗漏了什么,出现错误 "DataTables warning: table id=test - Ajax error"
Is there anything i missed in configuring django-rest-framework-datatables, getting error "DataTables warning: table id=test - Ajax error"
我尝试使用 rest 框架配置数据表,当页面加载所有数据表字段(如分页、搜索和显示标题但未显示数据)时出现错误。可能是什么原因?
serializers.py
class PermissionSerializer(serializers.ModelSerializer):
class Meta:
model = Permission
fields = (
'name', 'code', 'app',
)
views.py
from rest_framework import viewsets
from .serializers import PermissionSerializer
class PermissionViewSet(viewsets.ModelViewSet):
queryset = Permission.objects.all()
serializer_class = PermissionSerializer
class ViewallPerms(View):
def get(self, request):
context = {
'a' : 'a',
}
return render(request, 'flamika_admin/view_allpermissions.html', context)
urls.py
url(r'^perms/$', views.PermissionViewSet, name='perms'),
path('all-perms', login_required(views.ViewallPerms.as_view(), login_url='f_admin:admin_login'), name='all-perm'),
view_allpermissions.html
<script src="https://code.jquery.com/jquery-1.8.0.min.js"></script>
<div class="row">
<div class="col-sm-12 col-xs-12">
<table id="test" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>Code</th>
<th>Name</th>
<th>App</th>
</tr>
</thead>
</table>
</div>
</div>
<script>
$(document).ready(function() {
var table = $('#test').DataTable({
"serverSide": true,
dataSrc: "",
"ajax": "{% url 'flamika_admin:perms' %}",
"columns": [
{"data": "name"},
// Use dot notation to reference nested serializers.
// This data: could alternatively be displayed with the serializer's ReadOnlyField as well, as seen in the minimal example.
{"data": "code"},
{"data": "app"},
]
});
$('.btn-decade').on('click', function() {
table.columns().search('');
var rel = $(this).attr('rel');
if (rel) {
table.columns(3).search('^' + rel + '[0-9]$', true).draw();
} else {
table.draw();
}
});
$('#albums_minimal').DataTable({
"search": {"regex": true},
"language": {"searchPlaceholder": "regular expression"}
});
});
</script>
请告诉我哪里出错了,这是使用数据表配置 server-side 的正确方法吗?请纠正我。我想显示该模型中的所有数据。
您忘记在 ajax API 调用中添加 "?format=datatables"
。 Datatables 期望以某种方式响应以正确显示它,如果您已正确配置 django-rest-framework-datatables
(按照文档,它非常简单),库会检查 format
参数是否设置为 datatables .如果未设置,则使用 DRF 的默认分页格式(不适用于数据表,您的情况),如果设置,则 django-rest-framework-datatables
以正确的方式为数据表设置响应格式。
注意:所以我想提一下,如果你想在 js 文件中使用 django 的反向功能,我会 link https://github.com/ierror/django-js-reverse 有一个很好的库。
使用它来反转并将 ?format=datatables
添加到 url 或者您可以手动编写 url。
例如。
"ajax": {
"url": "http://127.0.0.1:8000/perms/?format=datatables",
"type": "GET",
"headers": {
/* any headers */
},
"dataSrc": "Mention your data source from the respone "
}
检查那里的url,确保它是正确的。我刚刚写了一个例子。
更新:
PermissionViewSet
的 url 路由不正确。
正确的形式是:
url(r'^perms/$', PermissionViewSet.as_view({"get": "list"}), name="perms")
注意请求方法的映射。
我尝试使用 rest 框架配置数据表,当页面加载所有数据表字段(如分页、搜索和显示标题但未显示数据)时出现错误。可能是什么原因?
serializers.py
class PermissionSerializer(serializers.ModelSerializer):
class Meta:
model = Permission
fields = (
'name', 'code', 'app',
)
views.py
from rest_framework import viewsets
from .serializers import PermissionSerializer
class PermissionViewSet(viewsets.ModelViewSet):
queryset = Permission.objects.all()
serializer_class = PermissionSerializer
class ViewallPerms(View):
def get(self, request):
context = {
'a' : 'a',
}
return render(request, 'flamika_admin/view_allpermissions.html', context)
urls.py
url(r'^perms/$', views.PermissionViewSet, name='perms'),
path('all-perms', login_required(views.ViewallPerms.as_view(), login_url='f_admin:admin_login'), name='all-perm'),
view_allpermissions.html
<script src="https://code.jquery.com/jquery-1.8.0.min.js"></script>
<div class="row">
<div class="col-sm-12 col-xs-12">
<table id="test" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>Code</th>
<th>Name</th>
<th>App</th>
</tr>
</thead>
</table>
</div>
</div>
<script>
$(document).ready(function() {
var table = $('#test').DataTable({
"serverSide": true,
dataSrc: "",
"ajax": "{% url 'flamika_admin:perms' %}",
"columns": [
{"data": "name"},
// Use dot notation to reference nested serializers.
// This data: could alternatively be displayed with the serializer's ReadOnlyField as well, as seen in the minimal example.
{"data": "code"},
{"data": "app"},
]
});
$('.btn-decade').on('click', function() {
table.columns().search('');
var rel = $(this).attr('rel');
if (rel) {
table.columns(3).search('^' + rel + '[0-9]$', true).draw();
} else {
table.draw();
}
});
$('#albums_minimal').DataTable({
"search": {"regex": true},
"language": {"searchPlaceholder": "regular expression"}
});
});
</script>
请告诉我哪里出错了,这是使用数据表配置 server-side 的正确方法吗?请纠正我。我想显示该模型中的所有数据。
您忘记在 ajax API 调用中添加 "?format=datatables"
。 Datatables 期望以某种方式响应以正确显示它,如果您已正确配置 django-rest-framework-datatables
(按照文档,它非常简单),库会检查 format
参数是否设置为 datatables .如果未设置,则使用 DRF 的默认分页格式(不适用于数据表,您的情况),如果设置,则 django-rest-framework-datatables
以正确的方式为数据表设置响应格式。
注意:所以我想提一下,如果你想在 js 文件中使用 django 的反向功能,我会 link https://github.com/ierror/django-js-reverse 有一个很好的库。
使用它来反转并将 ?format=datatables
添加到 url 或者您可以手动编写 url。
例如。
"ajax": {
"url": "http://127.0.0.1:8000/perms/?format=datatables",
"type": "GET",
"headers": {
/* any headers */
},
"dataSrc": "Mention your data source from the respone "
}
检查那里的url,确保它是正确的。我刚刚写了一个例子。
更新:
PermissionViewSet
的 url 路由不正确。
正确的形式是:
url(r'^perms/$', PermissionViewSet.as_view({"get": "list"}), name="perms")
注意请求方法的映射。