day52 多表操作

first last  get 取到的是一个实例对象,并非一个Query集合对象

publishs=models.ForeignKey('Publish',on_delete=models.CASCADE)
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'

举例owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE)

#查询记录(通过对象)
一对多
正向查询:
book_obj=Book.objects.get(name="python")
pub_obj=book_obj.publish----》书籍对象对应的出版社对象,一对多情况下一定是一个对象
pub_obj.name
反向查询:
pub_obj = Publish.objects.filter(name="人民出版社")[0]
pub_obj.book_set.all().values("name","price")

外键 关联可以不加引号,但是一定要放在上面,不然找不到

#查询记录(filter和 values 都可以双下划线__)

#人民出版社出版过的书籍与价格
ret=Book.objects.filter(publish__name="人民出版社").values("name","price")

#python这本书出版社的名字
ret2=Publish.objects.filter(book__name="python").values("name")

#python这本书出版社的名字
ret3=Book.objects.filter(name="python").values("publish__name")

#python这本书出版社的名字
ret3=Book.objects.filter(name="python").values("publish__name")

#北京的出版社出版书的名字
ret4=Book.objects.filter(publish__city="北京").values("name")

#2017年上半年出版过书的出版社的名字
ret5=Book.objects.filter(pub_date__lt="2017-07-01",pub_date__gt="2017-01-01").values("publish__name")

猜你喜欢

转载自www.cnblogs.com/yikedashuyikexiaocao/p/10154862.html