Django一对多

一对多更多查询操作

复制代码
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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值