成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Django多層嵌套ManyToMany字段ORM操作詳解

瀏覽:8日期:2024-10-04 18:22:36

在用django寫項目時,遇到了許多場景,關于ORM操作獲取數據的,但是不好描述出來,百度搜索關鍵詞都不知道該怎么搜,導致一個人鼓搗了好久。這里細化下問題,還原場景,記錄踩下的坑

首先先列舉model,我舉些生活中的例子,更方便理解問題

# 習題class Problem(models.Model): desc = models.CharField() answer = models.TextField() is_pass = models.BooleanField(default=False, verbose_name='是否通過')# 章節class Chapter(models.Model): _id = models.IntegerField(verbose_name='編號') title = models.CharField() problem = models.ManyToManyField(Problem) pass_rate = models.IntegerField(verbose_name='通關率')# 書籍 class Book(models.Model): title = models.CharField() desc = models.TextField() chapter = models.ManyToManyField(Chapter,verbose_name='章節') speed = models.IntegerField(verbose_name='學習進度', default=0)

假設是一本數學書,有5個章節,每個章節里有數量不等的習題,

即book與chapter是多對多,chapter與problem也是多對多

場景一: 書籍下的所有習題

# 按我的理解是取問題非空的章節數# 類似于問爺爺有幾個孫子,沒辦法跨輩,就按一個孫子對應一個爸爸來取(有重復)book.chapter.filter(problem___id__isnull=False).count()

場景二:書籍下所有通過的習題

book.chapter.filter(problem__is_pass=True).count()

場景三: 判斷某個問題是否在這本書里

def problem_in_ladder(book, problem): for i in book.chapter.all(): if problem in i.problem.all():return True return False

盡可能的減少view中對models的取值操作,所以把上面幾個場景方法寫在models類中

最終的models

# 習題class Problem(models.Model): desc = models.CharField() answer = models.TextField() is_pass = models.BooleanField(default=False, verbose_name='是否通過')# 章節class Chapter(models.Model): _id = models.IntegerField(verbose_name='編號') title = models.CharField() problem = models.ManyToManyField(Problem) pass_rate = models.IntegerField(verbose_name='通關率') @property def items(self): return self.problem.count() @property def pass_problem(self): return self.problem.filter(is_pass=True).count() # 書籍 class Book(models.Model): title = models.CharField() desc = models.TextField() chapter = models.ManyToManyField(Chapter,verbose_name='章節') speed = models.IntegerField(verbose_name='學習進度', default=0) @property def chapters(self): return self.chapter.count() @property def pass_count(self): return self.chapter.filter(problem__is_pass=True).count() @property def items(self): return self.chapter.filter(problem___id__isnull=False).count()

補充知識:django中當model設置了ordering后,使用distinct()和annotate()問題記錄

model類如下,我在class Meta中設置了ordering = [’-date_create’],即模型對象返回的記錄結果集是按照這個字段排序的。

class SystemUserPushHistory(models.Model): id = models.UUIDField(default=uuid.uuid4, primary_key=True) host_name = models.CharField(max_length=128, null=False) system_username = models.CharField(max_length=128, null=False) method = models.CharField(max_length=32, null=False) is_success = models.BooleanField(default=False) date_create = models.DateTimeField(auto_now_add=True, editable=False) message = models.CharField(max_length=4096, null=True) class Meta: db_table = 'assets_systemuser_push_history' ordering = [’-date_create’] def __str__(self): ret = self.system_username + ' => ' + self.host_name return ret

當業務有需求如對host_name進行分組顯示,在代碼中用到了annotate,如下。

>>> from django.db.models import Count >>> from assets.models import SystemUserPushHistory>>> p = SystemUserPushHistory.objects.values('host_name').annotate(dcount=Count(1))>>> p<QuerySet [{’host_name’: ’點2’, ’dcount’: 1}, {’host_name’: ’點3’, ’dcount’: 2}, {’host_name’: ’點2’, ’dcount’: 1}, {’host_name’: ’點3’, ’dcount’: 1}]>>>> print(p.query)SELECT `assets_systemuser_push_history`.`host_name`, COUNT(1) AS `dcount` FROM `assets_systemuser_push_history` GROUP BY `assets_systemuser_push_history`.`host_name`, `assets_systemuser_push_history`.`date_create` ORDER BY `assets_systemuser_push_history`.`date_create` DESC

可以看到,所得到的結果并不像我們預期的一樣,之后把執行的sql輸出出來可以看到在group by的時候是對host_name和date_create進行分組,原因就是因為我們在model類中設置了ordering,去掉之后代碼運行正常。

使用distinct和上面的情況類似,就不列出來了。

以上這篇Django多層嵌套ManyToMany字段ORM操作詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国语自产精品视频在线看8查询8| 婷婷久久综合九色综合伊人色| 亚洲不卡在线观看| 狠狠色综合网| 国产肉丝袜一区二区| 盗摄精品av一区二区三区| 欧美喷潮久久久xxxxx| 久久精品国产色蜜蜜麻豆| 国产精品一区二区三区免费观看| 亚洲免费伊人电影| 一本综合久久| 亚洲国产欧美在线| 国产一区二区三区奇米久涩| 亚洲综合男人的天堂| 国产欧美一区二区视频| 亚洲视频一区在线| 亚洲三级观看| 亚洲国产一二三| 噜噜噜91成人网| 日日骚欧美日韩| 欧美伊人久久久久久久久影院| 国产精品欧美综合在线| 91免费观看视频在线| 久久亚洲欧美国产精品乐播| 91片黄在线观看| 国产精品视频线看| 亚洲国产免费看| 亚洲国产精品一区二区www | 久久久久久夜| 亚洲超碰97人人做人人爱| 久久一区激情| 免费人成黄页网站在线一区二区| 在线视频一区二区三| 精品一区二区综合| 欧美一级午夜免费电影| 99久久婷婷国产| 国产精品伦一区二区三级视频| 欧美日本中文| 一区二区激情小说| 老司机免费视频久久| 国产美女精品在线| 久久久一区二区| 亚洲视频碰碰| 亚洲高清久久久| 欧美性大战久久| 成人午夜精品在线| 国产三级精品视频| 99在线精品视频在线观看| 亚洲国产日韩在线一区模特| 久久综合九色99| 国产精品亚洲一区二区三区妖精| 久久一区二区三区四区| 欧美国产视频在线观看| 亚洲蜜臀av乱码久久精品 | 久久国产精品久久w女人spa| 免费观看一级欧美片| 日韩欧美精品三级| 国产精品高清一区二区三区| 亚洲午夜精品在线| 欧美一区二区三区四区在线观看| 午夜精品久久99蜜桃的功能介绍| 亚洲一区自拍偷拍| 宅男噜噜噜66一区二区66| 午夜精品电影| 亚洲高清不卡在线| 欧美肥大bbwbbw高潮| 豆国产96在线|亚洲| 国产精品久久久久久久久快鸭| 久久久久久精| 国产a级毛片一区| 亚洲天堂中文字幕| 欧美亚洲国产一区二区三区 | 日本韩国欧美一区| thepron国产精品| 亚洲综合久久久久| 日韩欧美成人激情| 99视频日韩| 国产成人啪免费观看软件| 国产精品国产三级国产aⅴ入口 | 最新中文字幕一区二区三区| 日本韩国精品在线| 99r国产精品| 亚洲一区免费观看| 欧美一级爆毛片| 国产欧美日韩综合一区在线播放| 国产精品一区二区三区99| 亚洲少妇30p| 欧美精品色一区二区三区| 伊人久久亚洲美女图片| 久久国产精品99久久久久久老狼 | 91在线免费视频观看| 亚洲va国产天堂va久久en| 精品99一区二区三区| 久久精选视频| 成人av第一页| 午夜欧美电影在线观看| 亚洲精品一区二区三区福利| 久久久久网站| 欧美日韩精品免费观看视一区二区 | 亚洲麻豆av| 国产成人亚洲综合a∨猫咪| 亚洲免费伊人电影| 日韩情涩欧美日韩视频| 久久精品日韩欧美| 欧美日本韩国在线| 亚洲mv在线观看| 日本一区二区免费在线观看视频| 91电影在线观看| 激情欧美国产欧美| 国产成人免费在线观看不卡| 亚洲综合一区二区三区| 欧美mv日韩mv亚洲| 久久久亚洲一区| 国产精品激情电影| 丁香另类激情小说| 免费在线看一区| 亚洲人成影院在线观看| 2021国产精品久久精品| 欧美日韩中字一区| 亚洲欧美清纯在线制服| 欧美chengren| 粉嫩久久99精品久久久久久夜 | 欧美精品一级| 国内精品伊人久久久久av影院| 亚洲激情欧美激情| 国产欧美日韩亚州综合| 91麻豆精品91久久久久同性| 性色一区二区| 精品av久久久久电影| 成人性色生活片免费看爆迷你毛片| 丝袜美腿亚洲综合| 亚洲欧美影音先锋| 国产亚洲一区二区三区在线观看 | 日韩欧美中文一区| 日本丶国产丶欧美色综合| 伊人激情综合| aaa欧美日韩| 国产精品一线二线三线| 美女诱惑一区二区| 亚洲1区2区3区4区| 亚洲天天做日日做天天谢日日欢| 久久看人人爽人人| 日韩精品一区国产麻豆| 欧美精品在欧美一区二区少妇| 久久永久免费| 欧美一级播放| 一区二区三区精品国产| 国产精品v日韩精品v欧美精品网站| 成人性生交大片免费看视频在线| 久久er精品视频| 日韩精品亚洲一区二区三区免费| 亚洲美女在线国产| 亚洲视频资源在线| 精品国产一二三| 日韩一级二级三级精品视频| 欧美精品亚洲二区| 欧美福利视频导航| 欧美日韩精品欧美日韩精品一综合| 久久综合九色99| 久久精品午夜| 久久riav二区三区| 一本色道88久久加勒比精品| 亚洲成色精品| 日韩一级免费| 在线综合亚洲| 野花国产精品入口| 1024亚洲| 亚洲国产一区二区精品专区| 一区在线观看| 在线视频观看日韩| 一本一本久久a久久精品综合妖精| 狠狠色综合网| 亚洲精品自在在线观看| 亚洲青色在线| a91a精品视频在线观看| 激情六月综合| 一本色道久久| 裸体一区二区| 91黄色在线观看| 欧美视频日韩视频在线观看| 欧美三级三级三级| 欧美日韩电影在线播放| 欧美精品丝袜久久久中文字幕| 欧美丰满少妇xxxxx高潮对白| 欧美一区二区三区白人| 日韩欧美一二三四区| 精品粉嫩超白一线天av| 国产性色一区二区| 自拍视频在线观看一区二区| 一区二区三区欧美激情| 亚洲高清一区二区三区| 视频一区二区不卡| 久久9热精品视频| 丰满放荡岳乱妇91ww| 女女同性女同一区二区三区91| 狠狠色噜噜狠狠色综合久| 亚洲免费高清| 一本到不卡免费一区二区| 欧美挠脚心视频网站| 日韩欧美在线网站|