ORM对关联表的操作

196 阅读1分钟

启动django shell命令行

python manage.py shell

在学生数据表里获取名字为‘白月’的学生信息

s1=Student.objects.get(name='白月')

根据外键表数据过滤,在student表查找一年级学生

Student.objects.filter(grade=1).values()

查找Student表中所有‘一年级中国学生’

cn=Country.objects.get(name='中国')  #变量cn获取Country表中的所有国家为‘中国’的值
Student.objects.filter(grade=1,country_id=cn_id).values() #查找一年级中国学生

还有外键关联,更方便的写法

Student.objex=cts.filter(grade=1,country__name='中国').values() #"__"是外键关联的写法

反向访问:已经获得Country对象,如何访问到所有属于这个国家的学生?

cn=Country.objects.get(name='中国')
cn.student_set.all() #通过表Model转化为小写,再加上_set来获取所有的反向外键关联对象
#如果在Student表中的Country字段上 写上 related_name='<字段名>' ,就可以把student_set换成<字段名>

反向过滤:获取 具有一年级学的 国家的 名字

#获取所有一年级学生的id列表
country.ids=Student.objects.filter(grade=1).vlaues_list('country',flat=True)
#通过id列表使用 id__in 过滤
Country.objects.filter(id__in=country.ids).values()

制作简易登录页面

def login(request):
    html="""
        <form>
            <input typr="text" name="username">
            <input type="password" name="password">
            <input type="submit" value="登录">
        </form>
     """
     return HttpResponse(html)

GET和POST的区别

GET从后台获取数据,POST向后台提交数据

模板分离

1.配置setting.py中的TEMPLATES

'DIRS': [os.path.join(BASE_DIR,"<html文件所在的文件夹位置>")], #html文件夹位置

2.逻辑代码页面views.py引用html文件

return render(request,'<html的文件名>')