django—modals中的增删改查

在查询的时候,在filter和values中可以运用万能的双下划线”__”直接将子表或者主表的想查的所有对象拿过来,例如我想查由南方出版社出版的书的价格和名字,那么我们只要输入:

Book.objects.filter(publish__name=’南方出版社’).values(‘name’,’price’),

反之我们也可以查询三国演义这本书的出版社的地址:

Publish.objects.filter(book__name=’三国演义’).values(‘city’)

在values中使用双下划线的例子:
查找三国演义这本书的出版社的名字和地址

Book.objects.filter(name='三国演义').values('publish__name','publish__city')

首先先在Book表中定位到name=‘三国演义’,然后在values中直接调用外键关联的publish的表中的内容,双下划线直接调用了publish中的所有数值。这句话也可以用另一种方式写:

Publish.objects.filter(book__name=’三国演义’).values(‘name’,’city’)

Values里的数据是用来显示最后想要得到的数据,前面只是查询。
在django的models中一共有2中数据类型:querysetobject对象:
Object:一个object对象就是表中的一条数据,表中所有的字段它都有
Queryset查询集是一组数据的集合,跟python的list基本一样的

所以当我们在使用双下划线时,实际上是调用了QUERYSET查询集进行获取,**queryset__**可以获取所有的数据对象。和object.字段名的查询结果是一样的。

Object.id=queryset__id

在进行多对多表的ORM操作的时候,首先设置ManyToMany()如果括号里的表名上面还没有定义,那么就不能直接使用要加引号。
在对多表进行操作时,实际上是在操作设置了ManyToMany的这个字段名。
例如:定义了一个Student表,在表中t=ManyToMany(‘Teacher’),那么t就是Student的一个字段,一共有三种方式可以操作,增删改。

当然首先要获取一个对象,在这里要特别注意我们要获取的对象不能时Queryset对象,这就是说我们在那对象是不能只使用all和filter,在后面要加条件,不然会报错。

然后就是增加:obj.t.add()括号里填写要添加的老师表里的id号,可以是单个参数,2个参数,或者是列表。注意要加列表时,列表前要加*号。例如obj.t.add(*[1,2,3])

删:obj.t.remove()用法和增加相同。
obj.t.clear()删除所有
改:这里是一个新的方法obj.t.set(),注意set方法的参数是一个列表,不用加*号,set的作用是将列表里有的id设置,其余全部清楚。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值