一、反向连表查询
① 通过object的形式反向连表
obj.小写表名_set.all()
publish=models.Publish.objects.filter(name__contains='长沙').first()
books=publish.book_set.all()
for book in books:
print(book.title)
② 通过object的形式反向绑定外键关系
authorobj = models.Author.objects.filter(id=1).first()
objects = models.Book.objects.all()
authorobj.book_set.add(*objects)
authorobj.save()
③ 通过values双下滑线的形式
objs.values("小写表名__字段")
注意对象集合调用values(),正向查询是外键字段__XX,而反向是小写表名__YY看起来
比较容易混淆;
books=models.Publish.objects.filter(name__contains='湖南').values('name','book__title')
authors=models.Book.objects.filter(title__icontains='云团').values('author__name')
print(authors)
filter()也支持__小写表名语法进行连表查询:
publishs=models.Publish.objects.filter(book__title='数据分析').values('name')
print(publishs)
二 、利用双下划线将字段和对应的操作连接起来
① 获取个数
models.Tb1.objects.filter(name='seven').count()
② 大于,小于
# 获取id大于1的值
models.Tb1.objects.filter(id__gt=1)
# 获取id大于等于1的值
models.Tb1.objects.filter(id__gte=1)
models.Tb1.objects.filter(id__lt=10)
# 获取id小于10的值
models.Tb1.objects.filter(id__lte=10)
# 获取id大于1 且 小于10的值
models.Tb1.objects.filter(id__lt=10, id__gt=1)
③ in & isnull
# 获取id等于11、22、33的数据
models.Tb1.objects.filter(id__in=[11, 22, 33])
# not in
models.Tb1.objects.exclude(id__in=[11, 22, 33])
# isnull
Entry.objects.filter(pub_date__isnull=True)
④ contains
models.Tb1.objects.filter(name__contains="ven")
# icontains大小写不敏感
models.Tb1.objects.filter(name__icontains="ven")
models.Tb1.objects.exclude(name__icontains="ven")
⑤ range
models.Tb1.objects.filter(id__range=[1, 2])