<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Django-ORM簡介

      Posted on 2022-11-27 21:38  呱呱呱呱嘰里呱啦  閱讀(31)  評論(0)    收藏  舉報

      Django ORM

      # 即對象關系模型
      # 類——表
      # 對象——記錄
      # 對象屬性(值)——記錄某個字段(值)
      
      #在models.py中寫一個類
      class User(models.Model):
          id = models.AutoField(primary_key=True)
          username = models.CharField(max_length=100) #CharField必須指定長度
          password = models.CharField(max_length=100, verbose_name = '密碼') #verbose_name即字段名注釋
      # 數據庫遷移命令,只要修改了models.py中關于數據庫的代碼就要執行以下兩條遷移數據
      python manage.py makemigrations #將操作記錄記錄到migrations文件夾
      
      python manage.py migrate #將操作同步到數據庫中
      # 當沒有定義主鍵時,ORM會自動創建一個id字段作為主鍵
      

      字段的增刪改查

      # 在原有的類中添加屬性
      class User(models.Model):
          id = models.AutoField(primary_key=True)
          username = models.CharField(max_length=100)
          password = models.CharField(max_length=100)
          age = models.IntegerField(verbose_name='年齡')
      # 在遷移中給出新建字段默認值
      info = models.CharField(max_length=100, verbose_name='個人信息', null=True)
      hobby = models.CharField(max_length=100, verbose_name='愛好', default='read')
      # 修改字段
      直接改類代碼,然后執行遷移
      # 刪除字段
      直接刪除類中設計的字段,然后遷移
      

      數據的增刪改查

      # 數據查詢 eg:views.py
      username = request.POST.get('username')
              password = request.POST.get('password')
              res = models.User.objects.filter(username=username) 
      #返回列表[User對象1,User對象2,User對象3]
      data = models.User.objects.filter() #查詢所有
      user_queryset = models.User.objects.all() #查詢所有
      
      
      # 數據增加
      def register(request):
          if request.method == "POST":
              username = request.POST.get('username')
              password = request.POST.get('password')
              if models.User.objects.filter(username=username):
                  return HttpResponse('用戶名已存在,請使用其他用戶名注冊')
              res = models.User.objects.create(username=username,password=password)
              return HttpResponse(f'用戶{res.username}注冊成功')
          return render(request, 'register.html')
      
      # 或
      user_obj = models.User(username=username,password=password)
      user_obj.save()
      
      # 數據編輯
      '''
      <tbody>
          {% for user_obj in user_queryset %}
              <tr>
                  <td>{{ user_obj.id }}</td>
                  <td>{{ user_obj.username }}</td>
                  <td>{{ user_obj.password }}</td>
                  <td>{{ user_obj.age }}</td>
                  <td>{{ user_obj.hobby }}</td>
                  <td>{{ user_obj.info }}</td>
                  <td> ***通過網頁后綴傳遞user_id信息給編輯路由***
                      <a href="/edit_user/?user_id={{ user_obj.id }}" class="btn btn-success btn-xs">編輯</a>
                      <a href="/del_user/" class="btn btn-danger btn-xs">刪除</a>
                  </td>
              </tr>
          {% endfor %}
      
      </tbody>
      '''
      def edit_user(request):
          edit_id = request.GET.get('user_id')
          if request.method == 'POST':
              username = request.POST.get('username')
              password = request.POST.get('password')
              age = request.POST.get('age')
              hobby = request.POST.get('hobby')
              info = request.POST.get('info')
              # 批量更新
              models.User.objects.filter(id=edit_id).update(username=username,\
                                                                                                          password=password,age=age,hobby=hobby,info=info)
              return redirect('/userlist/')
      
          edit_obj = models.User.objects.filter(id=edit_id).first()
      
          return render(request,'edit_user.html',{'edit_obj':edit_obj})
      # 數據刪除
      def del_user(request):
          del_id = request.GET.get('user_id')
          models.User.objects.filter(id=del_id).delete() #批量刪除
          return redirect('/userlist/')
      # 刪除數據并不是真正的內部刪除,而是修改該記錄的特殊標識字段的值
      

      創建表關系

      '''
      表關系:一對一、一對多、多對多
      判斷方法:換位思考,單向一對多即一對多,雙向一對多即多對多,雙向一對一即一對一
      '''
      # 圖書表 作者表 出版社表 作者詳情表
      # 出版社和圖書是一對多的關系,外鍵建在圖書表
      # 作者和圖書是多對多的關系,應該手動創建新表-圖書作者關系表:book2author,id,book_id,author_id
      # 作者與作者詳情是一對一的關系
      
      # 創建表關系,先創建基表,再添加外鍵字段,最后一起遷移
      
      
      from django.db import models
      
      
      # Create your models here.
      class Book(models.Model):
          title = models.CharField(max_length=32)
          price = models.DecimalField(max_digits=8, decimal_places=2)
          # 出版社和圖書是一對多的關系,外鍵建在圖書表
          publish = models.ForeignKey(to='Publish') #默認與目的表主鍵關聯
          # 圖書和作者是多對多的關系,本應新建二者關系表,在django中,外鍵字段建在查詢頻率較高的一方
          # ForeignKey對應的字段會在字段名后加'_id'生成最終的字段名
          authors = models.ManyToManyField(to='Author') # 虛擬字段,告訴ORM圖書與作者多對多的關系
          # ORM會自動創建二者關系新表,創建時使用兩張表的主鍵
      
      class Publish(models.Model):
          name = models.CharField(max_length=32)
          addr = models.CharField(max_length=64)
      
      
      class Author(models.Model):
          name = models.CharField(max_length=32)
          age = models.IntegerField()
          # 作者與作者詳情是一對一的關系,外鍵應建在查詢頻率較高的表
          # OneToOneField對應的字段也會在字段名后加'_id'生成最終的字段名
          author_details = models.OneToOneField(to='AuthorDetails')
      
      class AuthorDetails(models.Model):
          phone = models.CharField(max_length=32)
          addr = models.CharField(max_length=64)
      
      
      # 在django 1.x版本中,數據庫外鍵都是默認級聯更新、級聯刪除的。
      

      主站蜘蛛池模板: 亚洲二区中文字幕在线| 国产成人精品视频不卡| 高清无码爆乳潮喷在线观看| 中文字幕亚洲综合小综合| 国产精品久久精品| 天堂中文8资源在线8| 日韩欧美aⅴ综合网站发布| 亚洲最大成人在线播放| 欧美叉叉叉bbb网站| 精品国产一区二区三区国产区| 成人免费av色资源日日| 屁股中文字幕一二三四区人妻| 99久re热视频这里只有精品6| 国产亚洲av夜间福利香蕉149| 香港日本三级亚洲三级| 中国china体内裑精亚洲日本| 丰满人妻熟妇乱精品视频| 亚洲免费成人av一区| 国偷自产一区二区免费视频| 国产精品久久久久久久久久直播| 国产99精品成人午夜在线| 免费午夜无码片在线观看影院| 福利视频一区二区在线| 欧美人与动牲交精品| 精品一区二区不卡无码AV| 国产AV福利第一精品| 欧美激情一区二区| 亚洲精品自拍区在线观看| 亚洲欧美高清在线精品一区二区 | 18禁成人免费无码网站| 国产成人精品2021欧美日韩| 女人扒开的小泬高潮喷小| 国产色无码专区在线观看| 国产精品一区二区小视频| 欧美成人精品三级网站| 亚洲欧洲一区二区免费| 国产精品国产高清国产一区| 少妇性l交大片| 奶头好大揉着好爽视频| 国产午夜福利免费入口| 久久男人av资源网站|