我正在尝试向我的数据库发出查询集请求,我希望从响应中排除整个列,在本例中为列权重。但响应正在返回数据库中的所有列。我正在尝试使用延迟,但它不起作用。
我做错了什么?
视图.py
def product_table(request):
width = request.GET['width']
length = request.GET['length']
prod_filter = Product.objects.filter(length=length,width=width).defer('weigth')
data_prod =serializers.serialize('json', prod_filter)
return JsonResponse({'data_prod':data_prod})
Run Code Online (Sandbox Code Playgroud)
网页
...
<div>
<table id="id_prod" class="table table-striped table-bordered table-hover"></table>
</div>
<script>
$(document).ready(function(){
...
$.get('{% url "prod_table" %}',function (data_prod) {
var data_json = JSON.parse(data_prod['data_prod']);
var data_array = [];
for(var i = 0; i < data_json.length; i++) {
var arr = $.map(data_json[i]['fields'], function(el) { return el });
data_array.push(arr);
}
$('#id_prod').DataTable({
destroy: true,
data: data_array,
columns: [
{ title: "Name" },
{ title: "width" },
{ title: "length" },
{ title: "volume" },
]
});
});
Run Code Online (Sandbox Code Playgroud)
您的defer()调用会阻止 Django 在获取查询集时加载该列。但是,您的序列化程序随后需要延迟字段的值,因此稍后会获取该值。这意味着如果您根本没有使用 defer,您实际上最终会执行更多查询!
如果您只想序列化 fields 的子集,那么您需要fields在序列化查询集时指定:
data_prod =serializers.serialize('json', prod_filter, fields=['width', 'length', ...)
Run Code Online (Sandbox Code Playgroud)
请注意,在实践中,.defer('weight')优化可能是不必要的。在实践中,您可能不会看到查询时间有任何明显的减少。
| 归档时间: |
|
| 查看次数: |
3562 次 |
| 最近记录: |