两表连接进行增删改查

添加模型类

在model.py里添加模型类,增加外键,并生成迁移,运行迁移。

from django.db import models

# Create your models here.
class Major(models.Model):
    major_name = models.CharField(max_length=20,verbose_name='专业名')
    class Meta:
        verbose_name = '专业表'
        verbose_name_plural = verbose_name
        db_table = 'major'
    def __str__(self):
        return self.major_name
class Student(models.Model):
    stu_name = models.CharField(max_length=20,verbose_name='姓名')
    score = models.IntegerField(verbose_name='成绩')
    sex = models.CharField(max_length=3,verbose_name='性别')
    #增加外键
    major = models.ForeignKey(Major,on_delete=models.CASCADE,verbose_name='专业编号')
    class Meta:
        verbose_name = '学生表'
        verbose_name_plural = verbose_name
        db_table = 'student'
    def __str__(self):
        return self.stu_name

在admin.py里注册模型类。注册超级用户,并增加数据

from django.contrib import admin
from student.models import Major,Student
# Register your models here.
admin.site.register(Major)
admin.site.register(Student)

# 终端里注册超级用户
python manage.py createsuperuser

展示页面

展示专业页面

Views.py
class MajorView(View):
    def get(self,request):
        major_data = Major.objects.all()
        content = {
            'majors' : major_data
        }
        return render(request,'major.html',content)

注册路由在urls.py

from django.urls import path
from student import views
urlpatterns = [
   path('major/',views.MajorView.as_view()),
]

展示页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>专业表</h3>
<table border="1px" width="200px">
    <tr>
        <th>编号</th>
        <th>专业名称</th>
    </tr>
    {% for major in majors %}
    <tr>
        <th>{{ major.id }}</th>
        <th><a href="/student/{{ major.id }}/">{{ major.major_name }}</a></th>
    </tr>
    {% endfor %}
</table>
</body>
</html>

展示学生页面

class StudentView(View):
    def get(self,request,id):
        student_data = Student.objects.filter(major_id = id)
        content = {
            'students' : student_data
        }
        return render(request,'student.html',content)

注册路由在urls.py

from django.urls import path
from student import views
urlpatterns = [
   path('student/<int:id>/',views.StudentView.as_view()),
]

展示页面

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
</head>
<body>
<h3>学生表</h3>
<table border="1px" width="500px">
   <tr>
       <th>编号</th>
       <th>姓名</th>
       <th>成绩</th>
       <th>性别</th>
       <th>专业编号</th>
       <th>操作</th>
   </tr>
   {% for student in students %}
   <tr>
       <th>{{ student.id }}</th>
       <th>{{ student.stu_name }}</th>
       <th>{{ student.score }}</th>
       <th>{{ student.sex }}</th>
       <th>{{ student.major }}</th>
       <th>
           <a href="/delete/{{ student.id }}/">删除</a>
           <a href="/update/{{ student.id }}/">修改</a>
       </th>
   </tr>
   {% endfor %}
</table>
</body>
</html>

进行增删改查操作

增加

可以在专业页面下边写post方法

    def post(self,request):
       name = request.POST.get('name')
       score = request.POST.get('score')
       sex = request.POST.get('sex')
       major = request.POST.get('major')
       try:
           Student.objects.create(
               stu_name = name,
               score = score,
               sex = sex,
               major_id = major
           )
       except Exception as e:
           print(e)
           return HttpResponse('添加失败')
       return redirect('/major/')

在专业页面下边写添加表单

<form method="post">
   {% csrf_token %}
   姓名:<input type="text" name="name"><br>
   成绩:<input type="text" name="score"><br>
   性别:<input type="text" name="sex"><br>
   专业编号:<input type="text" name="major"><br>
   <input type="submit" value="添加">
</form>
删除
class DeleteView(View):
   def get(self,request,id):
       Student.objects.filter(id=id).delete()
       return redirect('/major/')

注册动态路由

from django.urls import path
from student import views
urlpatterns = [
   path('delete/<int:id>/',views.DeleteView.as_view()),
]

在学生页面后边增加删除操作

<a href="/delete/{{ student.id }}/">删除</a>
修改
class UpdateView(View):
   def get(self,request,id):
       try:
           student_data = Student.objects.get(id = id)
           content = {
               'students' : student_data
           }
       except Exception as e:
           print(e)
           return HttpResponse('获取数据失败')
       return render(request,'update.html',content)
   def post(self,request,id):
       name = request.POST.get('name')
       score = request.POST.get('score')
       sex = request.POST.get('sex')
       major = request.POST.get('major')
       try:
           Student.objects.filter(id=id).update(
               stu_name = name,
               score = score,
               sex = sex,
               major = major
           )
       except Exception as e:
           print(e)
           return HttpResponse('修改失败')
       return redirect('/major/')

注册动态路由

from django.urls import path
from student import views
urlpatterns = [
  path('update/<int:id>/',views.UpdateView.as_view())
]

在学生页面后边增加删除操作

  <a href="/update/{{ student.id }}/">修改</a>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值