您好我有一个自定义的Django / python资源/视图。如下
class ResourceView(JSONResponseMixin, View):
def get(self, request, *args, **kwargs):
status = 'error'
msg = "Success"
# Getting the x value from url/queryset
x= self.request.GET.get('x')
mas = self.request.GET.get('mas')
queryset_df = Forecast.objects.filter(Q(x=int(fab)) | Q(x=int("0"+x)))\
.values_list('mas').distinct()
queryset_or = Record.objects.filter(Q(pc_ext__x=int(x)) | Q(pc_ext__x=int("0"+x)))\
.values_list('mas').distinct()
new_mas_list = list(set(list(queryset_df) + list(queryset_or)))
new_mas_list.sort()
return self.render_json_response(dict(objects=new_mas_list))
返回masksets的值列表。如何获取valuelist的每个值(因为在我的html中,我有一个显示每个valuelist对象的下拉列表,显示正常;但是当我选择一个时,它将我作为值列表对象返回为["5300A"]
而不是5300A。我使用AngularJS来获取如下值:
//UPDATE MAS BASED ON USER FAB
$scope.update_mas = function(){
$scope.processing['update_mas'] = { msg: 'loading mas..', class: 'text-warning', show: true };
console.log('Stage1: Loading Mas..... ');
$http.get('{% url "masresourceview" %}', { params: { x: $scope.x} }).success(
function(data){
$scope.processing['update_mas'] = { msg: 'mas updated.', class: 'text-success' };
setTimeout(function () { $scope.processing['update_mas'] = null; $scope.$apply(); }, 1000);
$scope.maslist = data['objects'];
$scope.isDisable = true;
console.log($scope.maslist);
}).error(function(data, status){
$scope.processing['update_mas'] = { msg: 'Internal Error', class: 'text-danger' };
console.log('Stage1: Internal error while loading initial data:'+status );
});
};
我的资源/列表如下所示:
{
objects: [
[
"AMD14NM"
],
[
"BAFFIN1"
],
[
"BAGERA1"
],
[
"ELLSMR1"
],
[
"GARFLD1"
],
[
"GARFLD2"
],
当我放$scope.maslist = data['objects'][0];
时,我可以完美地获得第一个对象的值。我可以为对象的其余值做些什么?我需要改进我的views.py/resources吗?提前致谢。
答案 0 :(得分:0)
刚刚使用flatten
更新了退货部分。
from compiler.ast import flatten
return self.render_json_response(dict(objects=flatten(new_mas_list)))
答案 1 :(得分:0)
这是一个例子:jsfiddle.net/jkog5ph0/1但我更喜欢在显示之前准备数组。 Ramda.flatten例如。 ramdajs.com/docs/#flatten
答案 2 :(得分:0)
虽然之前的答案看起来是正确的,但您可以在服务器端以更简单的方式处理此问题。
values_list
有一个flat
参数来返回一个平面列表而不是列表列表(https://docs.djangoproject.com/fr/1.8/ref/models/querysets/#values-list)
因此您的观点应该是:
类ResourceView(JSONResponseMixin,View):
def get(self, request, *args, **kwargs):
status = 'error'
msg = "Success"
# Getting the x value from url/queryset
fab = self.request.GET.get('x')
mas = self.request.GET.get('mas')
# DRCForecast Masksets
queryset_df = Forecast.objects.filter(Q(x=int(fab)) | Q(x=int("0"+x)))\
.values_list('mas', flat=True).distinct()
# OrcRecord Masksets
queryset_or = Record.objects.filter(Q(pc_ext__x=int(x)) | Q(pc_ext__x=int("0"+x)))\
.values_list('mas', flat=True).distinct()
new_mas_list = list(set(list(queryset_df) + list(queryset_or)))
new_mas_list.sort()
return self.render_json_response(dict(objects=new_mas_list))