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

您的位置:首頁技術(shù)文章
文章詳情頁

使用Django實現(xiàn)把兩個模型類的數(shù)據(jù)聚合在一起

瀏覽:50日期:2024-10-18 08:09:35

Django中想要把模型類聚合得到想要的數(shù)據(jù)可以用F對象。

比如有模型類A和B,A和B之間有外鍵關(guān)聯(lián)在一起,A是子表,B是父表(反過來沒試過。。因為大部分數(shù)據(jù)都是用子表的,我想是可以的),那么可以這樣查:

A.objects.filter(userid=3,bookid=F(bid))

其中userid,bookid是模型類A的字段,bid是模型類B的字段。

這樣操作的結(jié)果就是可以查詢到userid為3且模型類A字段bookid等于模型類B字段bid的集合數(shù)據(jù)了。

F對象是可以比較兩個關(guān)聯(lián)模型類的字段數(shù)據(jù)的。

我看到網(wǎng)上有說F對象可以這樣用F(’b__id’) ==>F(’模型類名小寫__字段名’),此處是雙下劃線。

但是我用Django2.0時會報錯。。真是搞不懂,后來我直接使用字段名居然可以,醉了。

反正都可以試試吧

A.objects.filter(userid=3,bookid=F(bid))

A.objects.filter(userid=3,bookid=F(’b__bid’))

補充知識:Django Admin頁面顯示父表,編輯子表

默認情況下,ModelAdmin只允許您管理模型“本身”字段,而不是相關(guān)模型.以下方法將實現(xiàn),在應(yīng)用類的列表管理顯示頁面,顯示父表的字段;在編輯頁面,父表對子表進行編輯.

models.py如下

class Level(models.Model): # l_num = models.IntegerField(default=0, verbose_name=’序號’) name = models.CharField(max_length=20) is_delete = models.BooleanField(default=False) def __str__(self): return self.nameclass Grades(models.Model): name = models.CharField(max_length=20, verbose_name=’班級’) # 外鍵,這里關(guān)聯(lián)模型Level與模型名稱一樣,不是全小寫。 level = models.ForeignKey(’Level’, on_delete=models.DO_NOTHING) is_delete = models.BooleanField(default=False) def __str__(self): return ’%s%s’ % (self.level, self.name)class Students(models.Model): name = models.CharField(max_length=20, db_index=True, verbose_name=’姓名’) age = models.IntegerField(verbose_name=’年齡’) # 需要先提供一個二維的二元元組,第一個元素表示存在數(shù)據(jù)庫內(nèi)真實的值,第二個表示頁面上顯示的具體內(nèi)容 SEX_CHOICE = ( (’男’, ’男’), (’女’, ’女’), ) sex = models.CharField(max_length=10, choices=SEX_CHOICE, verbose_name=’性別’, default=’男’) grade = models.ForeignKey(’Grades’, on_delete=models.DO_NOTHING, verbose_name='班級') img_student = models.ImageField(upload_to=’img_student’, default=’img_student/default.png’, verbose_name=’頭像’) create_time = models.DateTimeField(auto_now_add=True, verbose_name=’創(chuàng)建時間’) last_update_time = models.DateTimeField(auto_now=True, verbose_name=’上次更新時間’) is_delete = models.BooleanField(default=False) def __str__(self): return self.name

在admin.py代碼如下:

@admin.register(Students)class StudentsAdmin(admin.ModelAdmin): list_display = (’name’, ’age’, ’sex’, ’grade’, ’create_time’, ’last_update_time’, ’is_delete’)

做完之后,顯示的效果如下:

使用Django實現(xiàn)把兩個模型類的數(shù)據(jù)聚合在一起

在應(yīng)用類的列表管理顯示頁面,顯示父表的字段

可以讓Students,顯示父表Grades的父表Level字段

在models.py里的Students類里,寫上如下代碼:

class Students(models.Model):

# 寫一個方法,定義在管理頁面上能夠顯示的外鍵字段字段 # grade為Students模型的外檢表,level為Grades模型的外檢表,那么為Level模型的字段 def dis_level(self): return self.grade.level.name # 定義該字段在管理后臺顯示的名稱 dis_level.short_description = ’年級’ # 定義該字段在管理后臺顯示的名稱 dis_level.short_description = ’年級’ # 方法列是不能排序的,如果需要排序需要為方法指定排序依據(jù)。添加的是’模型類字段’ # 如果是外鍵需要遵循這樣的語法:本表外鍵字段__(雙下劃線)外檢表字段或外檢表的外鍵字段__最終外鍵表要顯示的字段。 dis_level.admin_order_field = ’grade__level__name’

在admin.py里,把Students類里的方法,加入到list_display里:

@admin.register(Students)class StudentsAdmin(admin.ModelAdmin): list_display = (’name’, ’age’, ’sex’, ’grade’, ’dis_level’, ’create_time’, ’last_update_time’, ’is_delete’)

寫完之后,顯示的結(jié)果如下,多了年級,以及點擊年級可以進行排序:

使用Django實現(xiàn)把兩個模型類的數(shù)據(jù)聚合在一起

在編輯頁面,父表對子表進行編輯.

默認對學(xué)生編輯時,無法在編輯頁面直接編輯相關(guān)聯(lián)的子表,例如:

models.py代碼:

class Students(models.Model): name = models.CharField(max_length=20, db_index=True, verbose_name=’姓名’) age = models.IntegerField(verbose_name=’年齡’) # 需要先提供一個二維的二元元組,第一個元素表示存在數(shù)據(jù)庫內(nèi)真實的值,第二個表示頁面上顯示的具體內(nèi)容 SEX_CHOICE = ( (’男’, ’男’), (’女’, ’女’), ) sex = models.CharField(max_length=10, choices=SEX_CHOICE, verbose_name=’性別’, default=’男’) grade = models.ForeignKey(’Grades’, on_delete=models.DO_NOTHING, verbose_name='班級') img_student = models.ImageField(upload_to=’img_student’, default=’img_student/default.png’, verbose_name=’頭像’) create_time = models.DateTimeField(auto_now_add=True, verbose_name=’創(chuàng)建時間’) last_update_time = models.DateTimeField(auto_now=True, verbose_name=’上次更新時間’) is_delete = models.BooleanField(default=False) def __str__(self): return self.nameclass Course(models.Model): name = models.CharField(max_length=20, verbose_name=’課名’) is_delete = models.BooleanField(default=False) def __str__(self): return self.nameclass Score(models.Model): s_score = models.IntegerField(default=0, verbose_name=’分數(shù)’) s_course = models.ForeignKey(’Course’, on_delete=models.DO_NOTHING, verbose_name=’課程’) s_student = models.ForeignKey(’Students’, on_delete=models.DO_NOTHING, verbose_name=’學(xué)生姓名’) is_delete = models.BooleanField(default=False) def __str__(self): # 要把s_score轉(zhuǎn)換為字符串,否則會報下面的錯誤。 ''' Exception Type:TypeError Exception Value: __str__ returned non-string (type int) :return: ''' return ’%s%s%s’ % (self.s_student, self.s_course, str(self.s_score))

打開學(xué)生的編輯頁面,是這樣子的:

使用Django實現(xiàn)把兩個模型類的數(shù)據(jù)聚合在一起

要給學(xué)生添加分數(shù),只能進入Score管理頁面,一個個添加,非常麻煩.

使用Django的TabularInline,可以解決這個問題,在父表里對子表進行編輯:

所有代碼都在admin.py里寫,具體如下:

# 一對多關(guān)聯(lián)表編輯,讓父表管理配置頁面能同時編輯子表,以下的Score為子表(有外鍵所在的表)class ScoreInline(admin.TabularInline): # Score 必須是models.py中的模型名稱,大小寫必須要匹配.這個模型為子表,以便可以被父表編輯 model = Score # 默認顯示條目的數(shù)量 # extra = 5 class StudentsAdmin(admin.ModelAdmin): # Inline把ScoreInline關(guān)聯(lián)進來,讓父表管理配置頁面能同時編輯子表. inlines = [ScoreInline, ]

做完之后,效果如下:

使用Django實現(xiàn)把兩個模型類的數(shù)據(jù)聚合在一起

以上這篇使用Django實現(xiàn)把兩個模型類的數(shù)據(jù)聚合在一起就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Django
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩激情在线观看| 亚洲精品在线免费观看视频| 日韩欧美电影在线| 日本va欧美va欧美va精品| 亚洲少妇自拍| 成人免费在线播放视频| 91免费看`日韩一区二区| 精品日韩一区二区| 丁香婷婷综合五月| 日韩午夜激情免费电影| 久久精品国产澳门| 欧美日韩一级黄| 久久99久久久欧美国产| 欧美在线不卡一区| 麻豆精品精品国产自在97香蕉 | 97se亚洲国产综合在线| 精品国产成人在线影院| 成人激情电影免费在线观看| 欧美成人女星排行榜| 不卡影院免费观看| 久久精品在线观看| 国内精品久久久久国产盗摄免费观看完整版 | 日韩精品久久理论片| 久久精品女人的天堂av| 日韩一区精品字幕| 欧美日韩日日夜夜| 成人性生交大片免费看中文| 日韩欧美你懂的| av在线不卡观看免费观看| 欧美国产日本视频| 夜夜嗨av一区二区三区网站四季av| 亚洲美女区一区| 亚洲一区二区三区免费观看 | 亚洲激情自拍视频| 香蕉久久夜色| 日本亚洲天堂网| 欧美日韩精品是欧美日韩精品| 精品亚洲aⅴ乱码一区二区三区| 欧美日韩二区三区| 国产成人免费在线视频| 久久久无码精品亚洲日韩按摩| 欧美激情 亚洲a∨综合| 中文字幕亚洲电影| 亚洲在线日韩| 久久国产剧场电影| 精品奇米国产一区二区三区| 欧美成人蜜桃| 亚洲乱码精品一二三四区日韩在线| 午夜宅男久久久| 精品一区二区三区av| 精品日韩99亚洲| 亚洲精品美女久久7777777| 五月婷婷欧美视频| 日韩一区二区免费在线观看| 欧美片网站免费| 亚洲一区二区视频在线| 欧美视频一区二区三区在线观看 | 色94色欧美sute亚洲线路二| 国产精品资源网站| 欧美国产精品专区| 国产一区二区高清视频| 麻豆精品在线视频| 久久网这里都是精品| 99香蕉国产精品偷在线观看 | 欧美一级一区二区| 女人色偷偷aa久久天堂| 日韩毛片精品高清免费| 色婷婷av一区二区三区之一色屋| 丁香激情综合国产| 国产精品电影一区二区三区| 老妇喷水一区二区三区| 成人黄色免费短视频| 亚洲另类在线一区| 欧美绝品在线观看成人午夜影视| 欧美精品偷拍| 日本中文字幕一区| 久久综合九色综合97婷婷| 一本色道婷婷久久欧美| 国产一区在线视频| 国产精品美女久久久久久| 久久综合网络一区二区| 波多野结衣中文一区| 亚洲一区二区三区在线| 欧美一级二级三级乱码| 99精品视频免费全部在线| 国产精品夜夜嗨| 亚洲精品视频观看| 欧美精品 日韩| 亚洲国产裸拍裸体视频在线观看乱了中文| 奇米影视7777精品一区二区| 国产日产欧美一区二区三区| 色偷偷久久人人79超碰人人澡| 欧美成人国产| 麻豆国产精品777777在线| 中文字幕av不卡| 欧美日韩国产精选| 亚洲精品一区二| 国产精品资源在线观看| 亚洲精品水蜜桃| 精品国产青草久久久久福利| 久久久久一区二区| 欧美精品亚洲| 国产露脸91国语对白| 悠悠色在线精品| 欧美变态tickle挠乳网站| 久久精品一区二区国产| 欧美视频日韩| 国产精品一级在线| 亚洲成av人在线观看| 国产日本欧美一区二区| 欧美午夜寂寞影院| 99re热精品| 91视视频在线观看入口直接观看www| 日本va欧美va欧美va精品| 中文字幕一区二区三区不卡在线| 在线不卡a资源高清| 西西人体一区二区| 黑人一区二区三区四区五区| 成人综合激情网| 奇米影视在线99精品| 中文字幕亚洲综合久久菠萝蜜| 欧美一区二区成人| 久久一区精品| 亚洲经典在线| 暖暖成人免费视频| 国产乱码一区二区三区| 性久久久久久久久久久久| 国产精品乱人伦| 欧美xxxxx牲另类人与| 一本高清dvd不卡在线观看| 亚洲黄色成人| 牛牛国产精品| 国产成人精品网址| 久久国产精品免费| 视频一区二区三区在线| 亚洲免费av高清| 国产日韩精品一区二区三区 | 亚洲午夜一区二区三区| 欧美激情资源网| 日韩精品一区二区在线观看| 欧美视频日韩视频在线观看| 免费亚洲视频| 在线亚洲免费| 激情偷拍久久| 午夜性色一区二区三区免费视频| 国产精品一区专区| 精品一区二区三区免费| 青青草原综合久久大伊人精品| 亚洲国产日韩a在线播放性色| 自拍视频在线观看一区二区| 国产午夜精品福利| 欧美videossexotv100| 在线成人免费观看| 欧美色电影在线| 欧美最猛性xxxxx直播| 久久久夜精品| 亚洲综合欧美日韩| 国产欧美一区二区三区另类精品 | 色综合色综合色综合色综合色综合| 国产伦精一区二区三区| 麻豆久久一区二区| 免费日韩伦理电影| 日韩av一区二| 午夜天堂影视香蕉久久| 亚洲高清视频的网址| 一区二区三区国产精品| 一区二区在线免费观看| 一区二区三区蜜桃| 亚洲午夜电影在线| 亚洲国产视频a| 日韩中文字幕亚洲一区二区va在线| 亚洲国产你懂的| 亚洲一二三级电影| 亚洲超丰满肉感bbw| 日韩影院精彩在线| 美女在线观看视频一区二区| 男女男精品网站| 极品少妇一区二区三区精品视频| 韩国欧美国产一区| 国产成人激情av| 91在线云播放| 欧美区国产区| 影音先锋在线一区| 亚洲激情成人| 午夜在线视频观看日韩17c| 美日韩免费视频| 欧洲生活片亚洲生活在线观看| 欧美视频精品在线| 欧美日韩和欧美的一区二区| 欧美一区二区女人| 精品久久一二三区| 国产亚洲一本大道中文在线| 国产精品嫩草影院com| 亚洲精品乱码久久久久久日本蜜臀| 亚洲在线视频一区| 美女爽到高潮91| 国产麻豆视频精品| 91在线播放网址| 亚洲国产清纯| 色爱区综合激月婷婷|