一对多更多查询操作
复制代码
from django.db import models
class UserType(models.Model):
user_type_name = models.CharField(max_length=32)
def str(self):
return self.user_type_name #只有加上这个,Django admin才会显示表名
class User(models.Model):
username = models.CharField(max_length=32)
pwd = models.CharField(max_length=64)
ut = models.ForeignKey(
to=‘UserType’,
to_field=‘id’,
# 1、反向操作时,使用的连接前缀,用于替换【表名】
# 如: models.UserGroup.objects.filter(a__字段名=1).values('a__字段名')
related_query_name='a',
#2、反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.b_set.all()
# 使用时查找报错
# related_name='b',
)
复制代码
复制代码
from django.shortcuts import HttpResponse
from app01 import models
def orm(request):
# 1 正向查找
#1.1 正向查找user表用户名
print(models.User.objects.get(username=‘zhangsan’).username) # zhangsan
#1.2 正向跨表查找用户类型
print(models.User.objects.get(username='zhangsan').ut.user_type_name) # student
#1.3 双下划线正向跨表正向查找
print( models.User.objects.all().values('ut__user_type_name','username') )
# 2 反向查找
# 2.1:【表名_set】,反向查找user表中用户类型为student 的所有用户
print( models.UserType.objects.get(user_type_name='student').user_set.all() ) # [<User: lisi>, <User: wangwu>]
# 2.2:【a__字段名】反向查找user表中张三在UserType表中的类型:([<UserType: teacher>])
print( models.UserType.objects.filter(a__username='zhangsan') ) # student
# 这里的a是user表的ForeignKey字段的参数:related_query_name='a'
# 2.3: 双下划线跨表反向查找
print( models.UserType.objects.all().values('a__username', 'user_type_name') )
# 3 自动创建User表和UserType表中的数据
'''
username = [{'username':'zhangsan','pwd':'123','ut_id':'1'},
{'username':'lisi','pwd':'123','ut_id':'1'},
{'username':'wangwu','pwd':'123','ut_id':'1'},]
user_type = [{'user_type_name':'student'},{'user_type_name':'teacher'},]
for type_dic in user_type:
models.UserType.objects.create(**type_dic)
for user_dic in username:
models.User.objects.create(**user_dic)
'''
return HttpResponse('orm')