日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django 【补充】ORM多对多正向查询

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django 【补充】ORM多对多正向查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、多對多的正反向查詢

class Class(models.Model):name = models.CharField(max_length=32,verbose_name="班級名")course = models.CharField(verbose_name="課程",max_length=32)def __str__(self):return self.nameclass Teacher(models.Model):name = models.CharField(max_length=23,verbose_name="姓名")classes = models.ManyToManyField(verbose_name="所屬班級",to="Class")def __str__(self):return self.name

題目1:查找娜娜老師所帶的班級

# 方式一:基于對象的查找obj = models.Teacher.objects.filter(name="娜娜").first()print(obj.classes.all())print("娜娜老師帶的班級",obj.classes.values("name"))# 方式二:基于雙下劃線的查找obj_cls = models.Teacher.objects.filter(name="娜娜").values("classes__name")print("娜娜老師帶的班級",obj_cls)

注意:要說明的是多對多的查詢用.all,,查單個的時候用.values或者values_list,不要用obj.classes.name,,這樣查到的會是None,反向查詢也是如此。我就是犯了這樣的錯,引以為戒。。

總結:不管是一對多,還是多對多,要是查詢多得一方就得用all()

運行結果截圖:

表結構:

from django.db import models# Create your models here. # 一個學生有一個班級,一個班級可以有好多學生,所以是 # 一對多的關系,關聯字段放在多的一方 class Student(models.Model):name = models.CharField(max_length=32,verbose_name="姓名")age = models.IntegerField(verbose_name="年齡")classes = models.ForeignKey(to="Class",verbose_name="所屬班級")def __str__(self):return self.nameclass Class(models.Model):name = models.CharField(max_length=32,verbose_name="班級名")course = models.CharField(verbose_name="課程",max_length=32)def __str__(self):return self.nameclass Teacher(models.Model):name = models.CharField(max_length=23,verbose_name="姓名")classes = models.ManyToManyField(verbose_name="所屬班級",to="Class")def __str__(self):return self.name

2、查詢海燕在那個班級

  # 方式一:print("海燕所在的班級",models.Student.objects.filter(name="海燕").values("classes__name"))# 方式二:obj_cls = models.Student.objects.filter(name="海燕").first()print("海燕所在的班級",obj_cls.classes.name)

3、查詢海燕所在班的老師的姓名

print("海燕所在班的老師的姓名",models.Student.objects.filter(name="海燕").values("classes__teacher__name"))

4、查詢軟件測試151班的所有學生的姓名

print("軟件測試151班的所有學生的姓名",models.Class.objects.filter(name="軟件測試151").values("student__name"))obj = models.Class.objects.filter(name="軟件測試151").first()# print("軟件測試151班的所有學生的姓名",obj.student_set.name) #這樣打印的結果是Noneprint("軟件測試151班的所有學生的姓名",obj.student_set.all().values("name"))

?

二、需要掌握的一個很重要的知識點

1、form表單中要用submit,如果用button切記要加上type,不然button默認的type是submit,會有影響

  <button class="login"?type="button">注冊</button>

<button type="button" οnclick="doValidation();">提交</button> <input type="button" οnclick="doValidation();" value="提交"/> 上面兩種寫法是對的,功能一樣。<button οnclick="doValidation();">提交</button> 如果寫成這種,默認為submit,本來doValidation方法里有提交功能了, 再加上按鈕也是提交功能,會提交兩次。所以使用按鈕時最好指定type類型。

?

?

轉載于:https://www.cnblogs.com/xiaohema/p/8456307.html

總結

以上是生活随笔為你收集整理的Django 【补充】ORM多对多正向查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。