django中使用filter()(即对QuerySet操作)时踩的坑

代码伺候:

  先看如下代码:

例1:

         message = Message.objects.filter(pk=message_id2)

            message[0].id = message_id2
            message[0].content = content2
            message[0].message_type = message_type2
       print(message[0].id)
       print(message[0].content)

            message[0].save()

  可正常从QuerySet中读取数据,并打印出来,无误。可是无法将数据同步到数据库中。

  

(1)all()返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

例如有Book表,其包含bookname,booknum两个属性, 如何使用Objects.all(),得到bookname和booknum的值

 (2)filter() 返回的是QuerySet对象,与all()相似,只是all()是查询所有数据,常用:filter表示‘ = ’,exclude表示’ != ’。

(3)get()返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据。

  

  来看一个QuerySet对象:

  

  message = Message.objects.filter(pk=message_id2)

  message[0].content

  这样子确实可以读取到QuerySet中的数据,可是对QuerySet修改后的数据无法保存到数据库。

  例1中不要尝试通过message.save()的方式去同步数据到数据库,因为QuerySet不存在save()方法。

正确写法如下:

    要想同步到数据库中,需使用对象进行数据同步操作。

例2:

       message = Message.objects.filter(pk=message_id2).first()

            message.id = message_id2
            message.content = content2
            message.message_type = message_type2
            message.save()

原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12583783.html

时间: 2024-10-21 00:27:58

django中使用filter()(即对QuerySet操作)时踩的坑的相关文章

WPF 窗体中获取键盘和鼠标无操作时的超时提示

原文:WPF 窗体中获取键盘和鼠标无操作时的超时提示 通过调用Windows API中的GetLastInputInfo来获取最后一次输入的时间 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windo

Django中ORM多对多表的操作

自己创建第三张表建立多对多关系 表的创建 # 老师表和学生表可以是一个多对多的关系,建表时可以手动建立第三张表建立关联 class Student(models.Model): name = models.CharField(max_length=32, null=True) age = models.CharField(max_length=32, null=True) class Teacher(models.Model): name = models.CharField(max_lengt

django中使用pandas,将queryset转化为dataframe,Django-pandas

在django中使用pandas操作django的ORM查询出来的QuerySet对象,可以使用插件django-pandas. 截止教程书写时间,django-pandas已发布到0.6.1. 依赖:django>=1.4.5 Django-model-utils >=1.4.0 Pandas >=0.12.0 当然,还需要numpy 用法: 1.IO模块: 该django-pandas.io模块提供了一些方便的方法,以便从django的查询集转换成DataFrames的创建. rea

Django中利用filter与simple_tag为前端自定义函数的实现方法

前言 Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些的函数功能并不支持,例如通过模板来判断一个返回值是否是合法的数字类型,此时如果又不希望通过后台视图代码来实现的话,我们就可以自定义一些前端函数功能. Django为我们提供了两种方式,分别是filter和simple_tag,下面对比两种方式,分别实现判断返回值的功能函数. 准备工作 1.应用

django中的filter(), all(), get()

1. 类名.objects中的get(), filter(), all() 的区别 下面定义两个模型类,分别为BookInfo, HeroInfo, BookInfo与HeroInfo为一对多的关系,代码如下: from django.db import models class BookInfoManager(models.Manager): def get_queryset(self): return super(BookInfoManager,self).get_queryset().fi

django 中从外界借助多个网站时 static 的存放和整理

在 模板之家中  前端页面直接上去抓取  可是遇到重复  或者 版本不统一  所以 在每个app下面建立自己的 stastic 在制作的html  页面上方 导入静态页面 {% load staticfiles %} 继续搬运 每个APP下都有自己的static文件夹,那如何设置将不会混用呢 以下是实例(我项目里有两个APP(login 和main)) 1.首先在setting 文件修改配置路径 STATIC_URL = '/static/'STATICFILES_DIRS = [    os.

Android emulator中C代码的调试——gdb/gdbservers时遇到的坑

版权声明:本文为博主原创文章,未经博主允许不得转载. 先写个helloworld吧,在Android源码树中创建文件夹external/helloworld,加入文件: // helloworld.c #include <stdio.h> #include <stdlib.h> int main(int argc, char** arv) { printf("Hello world~\n"); return 0; } # Android.mk LOCAL_PAT

Django中的数据记录的增、删、改、查

Django中数据的增删改查操作如下: 我们以一个model:User为例,User有三个字段,一个是username.passwd.phonenumber (1)增加一条记录 添加一个username.passwd.phonenumber字段值为s_username.s_passwd.s_phonenumber的记录 user=User() user.username=s_username user.passwd=s_passwd user.phonenumber=s_phonenumber

django中的字段、字段参数、orm操作、QuerySet相关方法:

常用字段  AutoField 自增的整形字段,必填参数primary_key=True,则成为数据库的主键.无该字段时,django自动创建. 一个model不能有两个AutoField字段. IntegerField 一个整数类型.数值的范围是 -2147483648 ~ 2147483647. CharField 字符类型,必须提供max_length参数.max_length表示字符的长度. DateField 日期类型,日期格式为YYYY-MM-DD,相当于Python中的dateti