python Q 和 F 查询
https://www.cnblogs.com/wdliu/p/7977504.html
https://www.cnblogs.com/ccorz/p/5882400.html
1.单表操作
2.多表操作
3.views.py代码
from django.shortcuts import render,HttpResponse
from app01.models import *
# Create your views here.
def index(req):
# Classes.objects.create(title="三班")
# Classes.objects.create(title="四班")
# Classes.objects.create(title="五班")
#
# Student.objects.create(username="fengfeng",age=14,gender=True,cs_id=1)
# Student.objects.create(username="xiaorong",age=22,gender=False,cs_id=2)
# Student.objects.create(username="fengfeng",age=11,gender=False,cs_id=3)
# 三班的所有学生
# ret=Student.objects.filter(cs__title="三班").values("username")
# print(ret)
#一般不做反向查询。。。。。。。。。。。。。
# obj=Classes.objects.filter(title="四班").first()
# print(obj.title)
# print(obj.id)
#默认为 student_set
# print(obj.student_set.all())
#自定义设置之后为 feng_set
# print(obj.feng_set.all())
#自定义设置之后可以取到
# ret=Classes.objects.all().values("id","title","feng_set","feng_set__username")
# print(ret)
# ret1=Student.objects.all().values("username","cs__title")
# ret2=Classes.objects.all().values("title","feng_set__username")
# print(ret1)
# print(ret2)
#多表操作(对象)
# Teachers.objects.create(name="fengfeng")
# Teachers.objects.create(name="xiaorong")
# Teachers.objects.create(name="liuzhen")
# Teachers.objects.create(name="bange")
# cls_list=Classes.objects.all()
# for obj in cls_list:
# print(obj.id,obj.title,obj.m.all())
# for row in obj.m.all():
# print(row.name)
#正向
# obj=Classes.objects.filter(id=1).first()
# obj.m.add(3)
#反向
#obj=Teachers.objects.filter(id=2).first()
#默认
# obj.classes_set.add(3)
#自定义
#obj.many_set.add(2)
#相当于重置,如果有的话不操作,没有进行添加,多的进行删除
#obj.many_set.set([1,2])
#正向
# v= Classes.objects.all().values("id","title","m","m__name")
# print(v)
#反向
# v= Teachers.objects.all().values("name","many_set__title")
# print(v)
return HttpResponse("ok")
4.models.py
from django.db import models
# Create your models here.
"""
老师表
"""
class Teachers(models.Model):
name=models.CharField(max_length=32)
#单表
# Teachers.objects.create(name='root')
# obj=Teachers(name='root')
# obj.save()
# Teachers.objects.all()
# Teachers.objects.filter(id=1,name='root')
# Teachers.objects.filter(id__gt=1).first()#大于1第一个
# Teachers.objects.filter(id=1).delete()
# Teachers.objects.all().update(name="alex")
# Teachers.objects.filter(id=1).update(name="alex")
"""
班级表
"""
class Classes(models.Model):
title=models.CharField(max_length=32)
m = models.ManyToManyField(Teachers,related_name="many_set")
def __str__(self):
return self.title
#多对多
#创建
# obj=Classes.objects.filter(id=1).first()
# #增加
# #老师id=2相当于
# obj.m.add(2)
# obj.m.add(3)
# #添加多个
# obj.m.add([4,5])
# #删除
# obj.remove([4,3])#删除班级id=1对应的老师id为4,3的数据
# obj.clear()#删除班级id=1的所有数据
# #重置
# obj.set([2,3,5])#表示把班级id=1对应的老师id更改设置为2,3,5
# #查询
# obj=Classes.objects.filter(id=1).first()
# ret=obj.m.all()#班级id=1对应的所有的老师列表
class Student(models.Model):
username=models.CharField(max_length=32)
age=models.IntegerField()
gender=models.BooleanField()
cs=models.ForeignKey(Classes,on_delete=models.CASCADE,related_name="feng_set")
def __str__(self):
return self.username+self.age+self.gender+self.cs
#一对多
"""
id username age gender cs_id
"""
# Student.objects.create(username="fengfeng",age=15,gender=0,cs_id=1)
# Student.objects.create(username="fengfeng",age=15,gender=0,cs=Classes.objects.filter(id=1).first())
# Student.objects.all()
# Student.objects.filter(id=1).delete()
# input("请输入班级ID")
#跨表操作用双下划线
# Student.objects.filter(cs__name="fengfeng").delete()
#Student.objects.filter(id=1).update(cs__name="fengfeng111")
#所有学生名称和班级名称
# Student.objects.all().values("username","cs__name")
#三班的所有学生
# Student.objects.filter(cs__name="三班").values("username")