GVKun编程网logo

Django 查询结果转换为JSON(django查询数据库结果转json)

19

关于Django查询结果转换为JSON和django查询数据库结果转json的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Angular2将一个json结果转换为一个接口、Django-

关于Django 查询结果转换为JSONdjango查询数据库结果转json的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Angular2将一个json结果转换为一个接口、Django - 限制查询结果、DJango 多条件查询结果分页、Django 数据Model 查询结果 转Json 格式等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Django 查询结果转换为JSON(django查询数据库结果转json)

Django 查询结果转换为JSON(django查询数据库结果转json)

 1 # User.objects.get(user_name=user_name); get查询结果转换为JSON
 2 def model2json(data):
 3     data.__dict__.pop("_state")
 4     rData = data.__dict__
 5     return rData
 6 
 7 # User.objects.filter(pwd=pwd); filter结果集转换为JSON
 8 def model2jsonArr(data):
 9     rData = []
10     for p in data:
11         p.__dict__.pop("_state") # 需要除去,否则不能json化
12         rData.append(p.__dict__) # 注意,实际是个json拼接的过程,不能直接添加对象
13     return rData

 

Angular2将一个json结果转换为一个接口

Angular2将一个json结果转换为一个接口

使用Angular2和typescript,我有一个从webApi返回的JSON,我需要把它变成一个特定类型的数组。我不知道如何将json转换到我需要的界面。

我的类型是这个界面:

export interface Country {
    Id: number;
    Name: string;
}

我的mock返回这个数组:

export var COUNTRIES: Country[] = [
    { "Id": 11,"Name": "US" },{ "Id": 12,"Name": "England" },{ "Id": 13,"Name": "Japan" }
];

这是我的代码:
country.service.ts

@Injectable()
export class CountryService {
    private _http = null;

    constructor(http: Http) {
        this._http = http;
    }

    getCountries() {
        return Promise.resolve(COUNTRIES);
    }
}

然后我用这个叫它:

export class CountryPickerComponent {
    public countries: Country[];

    constructor(private _countryService: CountryService) { }


    getCountries() {
        this._countryService.getCountries().then(data => this.setData(data));
    }

    setData(data) {
        //this.countries = data;
        this.countries = JSON.parse(data);
        var q = 1;
    }

    ngOnInit() {
        this.getCountries();
    }
}

如你所见,我有一个类变量,称为国家,它是一个国家界面的数组。这样可以预期。 (我知道我不需要setData方法 – 这是为了调试)

接下来,我将服务更改为一个返回此json的wepApi调用。

"[{"name":"England","id":1},{"name":"France","id":2}]"

我将服务中的getCountries方法更改为:

getCountries() {
    return new Promise(resolve=>
        this._http.get('http://localhost:63651/Api/membercountry')
            .subscribe(data => resolve(data.json()))
    );
}

使用JSON.parse,我将其转换为一个数组,然后我可以在angular2中使用。有用。它使用数据创建数组。但是它不是一个实现Country接口的数组。

请注意,JSON中的字段名称都是小写字母,但是接口属性以大写开头,并将其编码到接口。结果,当我得到真正的json它不工作。有没有办法将这个“投射”到界面,这会引起错误,让我知道有些错误?

很多例子使用map中的map,如下图所示:

getCountries() {
        var retVal;

        return new Promise(resolve=>
            this._http.get('http://localhost:63651/Api/membercountry')
                .map(ref => ref.json())
                .subscribe(data => resolve(data.json()))
        );
    }

我找不到文件。当我尝试它,我从来没有获得数据,但没有错误。没有编译错误,没有运行时错误。

您可以对由JSON.parse创建的对象所期望的接口进行类型断言。
this.http.get('http://localhost:4200/').subscribe((value: Response) => {
    let hero = <ServerInfo>value.json();
  });

但是,如果由于两个原因,服务器发送坏对象,则不会导致任何错误。

在编译时,transpiler不知道服务器将发送什么。

在运行时,所有类型的信息都被擦除,因为一切都被编译成了JavaScript的。

Django - 限制查询结果

Django - 限制查询结果

我想获取模型的最后 10 个实例并拥有以下代码:

 Model.objects.all().order_by(''-id'')[:10]

是不是先拾取所有实例,然后只拾取最后的 10 个实例?有没有更有效的方法?

答案1

小编典典

Django 查询集是惰性的。这意味着只有当您特别要求结果时,查询才会访问数据库。

因此,在您打印或实际使用查询结果之前,您可以在不访问数据库的情况下进一步过滤。

正如您在下面看到的,您的代码仅执行一个 sql 查询以仅获取最后 10 个项目。

In [19]: import logging                                 In [20]: l = logging.getLogger(''django.db.backends'')    In [21]: l.setLevel(logging.DEBUG)                      In [22]: l.addHandler(logging.StreamHandler())      In [23]: User.objects.all().order_by(''-id'')[:10]          (0.000) SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" ORDER BY "auth_user"."id" DESC LIMIT 10; args=()Out[23]: [<User: hamdi>]

DJango 多条件查询结果分页

DJango 多条件查询结果分页

在学习Django中,练手做了个项目,在实际编程当中发现了N多个坑,现在记录下心得体会,方便以后查询,本人Models只使用了一张表,前端HTML如下图所示,

多条件查询可以使用的技术:

  • Q查询
  • 查询条件动态存档放到1个字典里面,前台根据字典传值。
    如 status = { ''qq''  : ''123456''  , ''startdate'' :'' 2017-02-04 '', '' typeid '' : '' 1 '' }

条件存放到字典时需要注意的是

1、只有选中状态下,才获取查询的条件 

2、页面刷新时(GET请求),即使你什么都不做,文本框的值为空字符串,所以要判断获取状态是否为真

get_qq=request.GET.get(''search'')   #输入文本框的 name = ''search''
if get_qq:                  #当输入的QQ为真时,注意,刷新时,什么都不输入为空字符串
    status[''qq'']=get_qq     #==>>status={''qq'':get_qq}

 

3、如果查询条件为空时( status={}) ,模型类.objects.filter(status) 相当于xxx.objects.all()

所以第一次打开页面,或什么条件都没选择时,要设置获取的数据对象集为空

if len(status)==0: #如果字典为空,不含有任何过滤条件,即条件都没选择
    data = []      #设置数据为空
else:
    data =models.Order.objects.filter(**status)  
    
     # 字典 为空字符串时  status={}
     #len{status}=0
     #字典为None 时     status={None}
     #len(status)=1  python 3.x     

      这里注意下  len( { } )       len( { None } )  len(None)(报错)   的区别

对查询的结果进行分页时,需要注意的是:

1、每页获取的对象 为,当前页的对象集 Paginator.page(number).object_list  
      而不是总数据的对象集Paginator.object_list

2、分页的页码,是总数据的页码 Paginator.page_range

3、因为分页查询,所以form 的method 设置为 GET ,每页的查询状态 在Url 上有参数
       如 www.xxx.com/ ?name=lee & age=18

  注意:1、每页的Url 需要传递 查询条件参数  ?name=lee & key=value....

            2、GET 请求只能获取? 后面的数据 如果url 网址设置 www.xxx.com/1(页面)?key=value

            页码需要从浏览器获取 ,需要配置视图函数和 urls.py  url(r''^list/(\d*)'', list)

VIEWS.PY

def list(request,page):
    #....
    #....
    else:
        data =models.Order.objects.filter(**status)       
        if data:
            p=Paginator(data,5)   #分页 pre_page=1 每页显示1条数据
            ret[''p'']=p
            try:
                #从浏览器中获取当前页码,默认为1
                page=int(page)
                page_object_list=p.page(page) #当前页面的对象 
            except:
                #如果出错,如用户输入,ddd,返回第1页
                page=1
                page_object_list=p.page(1)
            ret[''page_object_list'']=page_object_list

 

Django 数据Model 查询结果 转Json 格式

Django 数据Model 查询结果 转Json 格式

概述

Django中常用到将Model查询结果转为Json格式数据。查询结果一般为QuerySet(Model类对象集合)或者单个Model类对象,可以使用Model的 __dict__ 属性,将Model数据转为Json格式数据。

方法

1. 单条数据格式

my_model = MyModel.objects.get( id=request.GET.get( "model_id" ) )
# 打印 my_model.__dict__ 发现有一个"_state",
# 不是我们Model定义的内容,需要去除
my_model.__dict__.pop( "_state" ) #需要去除,否则不能 Json化
return JsonResponse( my_model.__dict__, safe=False )

2. 多条数据

使用for循环,按单条数据方式处理即可,最后做成Json格式。

lst_my_model = MyModel.objects.all()
model_data = []
for item in lst_my_model:
        item.__dict__.pop( "_state" )
        model_data.append( item )
result = { "data": model_data }
return JsonResponse( result, safe=False )

今天关于Django 查询结果转换为JSONdjango查询数据库结果转json的分享就到这里,希望大家有所收获,若想了解更多关于Angular2将一个json结果转换为一个接口、Django - 限制查询结果、DJango 多条件查询结果分页、Django 数据Model 查询结果 转Json 格式等相关知识,可以在本站进行查询。

本文标签: