Django之orm一对多和多对多查询

Django---->orm一对多和多对多查询

1.我们需要设置一个子路由
《1》在主路由中

from django.contrib import admin
from django.urls import path,include   #此处加上include。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app1/', include('app1.urls')),   #把链接指向app1中的urls中。

]
《2》我们在app1中新建一个urls.py文件

from django.contrib import admin
from django.urls import path
from app1 import views
urlpatterns = [
    path('index/', views.index),
]

《3》其次再在app1中新建temolates文件夹再在其中新建一个app1文件(为了防止有两个app时,当我们的导入顺序不一样而识别错误)。之后我们可在其中写如我们的html文件
在这里插入图片描述
2.我们来在models.py文件中写入新建数据库表格
《1》

from django.db import models

# Create your models here.


class Subject(models.Model):
    name = models.CharField(max_length=32)
    price = models.IntegerField()

    def __str__(self):
        return "{}--{}".format(self.name, self.price)

class Student(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    phone = models.CharField(max_length=32)
    subject = models.ForeignKey(to='Subject', on_delete=True)

    def __str__(self):
        return "{}---{}".format(self.name, self.age)

class Teacher(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    phone = models.CharField(max_length=32)
    salary = models.CharField(max_length=32)
    student = models.ManyToManyField(to='Student')

    def __str__(self):
        return "{}---{}".format(self.name, self.age)

写完后在Terminal写入python manage.py makemigrations这个命令是记录我们对models.py的所有改动。python manage.py migrate 命令时 这条命令的主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库在这里插入图片描述
《2》我们在admin.py文件中写入如下代码

from django.contrib import admin
from app1.models import Student,Subject,Teacher
# Register your models here.

admin.site.register(Subject)
admin.site.register(Student)
admin.site.register(Teacher)

再在Terminal中写入 python manage.py createsuperuser 根据步骤来建立admin登录用户。这样我们可以更好的去给数据库添加内容。
在这里插入图片描述
在这里插入图片描述
网页显示的是英文,我们在setting的107行把en-us改成zh-hans就可以变成中文了。
添加完数据后后我们就可以来进行一些操作。
一对多的查询,eg:一门科目有多个学生选择

from django.shortcuts import render
from app1 import models
# Create your views here.

def index(request):
    #一对多查询  subject---》student

    #查询出吴弟弟学的学科 ,正向查询
    student_obj = models.Student.objects.get(name = '吴弟弟')
    # print(student_obj)
    subject_obj = student_obj.subject
    # print(subject_obj)

    #查询出python学科对应的学生
    python_obj = models.Subject.objects.get(name = 'python')
    # python_list = models.Subject.objects.filter(name = 'python')
    # print(python_obj)  #python--20300
    # print(python_list)  <QuerySet [<Subject: python--20300>]>
    student_list = python_obj.student_set.all()
    #print(student_list)  #<QuerySet [<Student: 吴弟弟---22>, <Student: 刘德华---45>]>

#多对多

#查询波老师教过的学生  正
bo_obj = models.Teacher.objects.get(name='波老师')
student_list = bo_obj.student.all()
print(student_list)

#查询鬼谷子被谁教过  反

didi_obj = models.Student.objects.get(name='吴弟弟')
teacher_list = didi_obj.teacher_set.all()
print(teacher_list)
return render(request, 'app1/index.html', locals())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值