从值列表python中获取每个值

时间:2015-11-05 02:48:07

标签: python angularjs django list django-rest-framework

您好我有一个自定义的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吗?提前致谢。

3 个答案:

答案 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))