日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

使用Django實現把兩個模型類的數據聚合在一起

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

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

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

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

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

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

F對象是可以比較兩個關聯模型類的字段數據的。

我看到網上有說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只允許您管理模型“本身”字段,而不是相關模型.以下方法將實現,在應用類的列表管理顯示頁面,顯示父表的字段;在編輯頁面,父表對子表進行編輯.

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=’班級’) # 外鍵,這里關聯模型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=’年齡’) # 需要先提供一個二維的二元元組,第一個元素表示存在數據庫內真實的值,第二個表示頁面上顯示的具體內容 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=’創建時間’) 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實現把兩個模型類的數據聚合在一起

在應用類的列表管理顯示頁面,顯示父表的字段

可以讓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 = ’年級’ # 方法列是不能排序的,如果需要排序需要為方法指定排序依據。添加的是’模型類字段’ # 如果是外鍵需要遵循這樣的語法:本表外鍵字段__(雙下劃線)外檢表字段或外檢表的外鍵字段__最終外鍵表要顯示的字段。 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’)

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

使用Django實現把兩個模型類的數據聚合在一起

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

默認對學生編輯時,無法在編輯頁面直接編輯相關聯的子表,例如:

models.py代碼:

class Students(models.Model): name = models.CharField(max_length=20, db_index=True, verbose_name=’姓名’) age = models.IntegerField(verbose_name=’年齡’) # 需要先提供一個二維的二元元組,第一個元素表示存在數據庫內真實的值,第二個表示頁面上顯示的具體內容 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=’創建時間’) 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=’分數’) s_course = models.ForeignKey(’Course’, on_delete=models.DO_NOTHING, verbose_name=’課程’) s_student = models.ForeignKey(’Students’, on_delete=models.DO_NOTHING, verbose_name=’學生姓名’) is_delete = models.BooleanField(default=False) def __str__(self): # 要把s_score轉換為字符串,否則會報下面的錯誤。 ''' 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))

打開學生的編輯頁面,是這樣子的:

使用Django實現把兩個模型類的數據聚合在一起

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

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

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

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

做完之后,效果如下:

使用Django實現把兩個模型類的數據聚合在一起

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

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲欧洲| 久久高清免费观看| 麻豆国产精品视频| 亚洲黄色网址| 亚洲国内欧美| 天堂va欧美ⅴa亚洲va一国产| 欧美伊人久久| 国产91在线精品| 欧美a级片一区| 日韩毛片网站| 亚洲综合电影| 亚洲欧美日韩国产一区| 日韩精品一区二区三区中文字幕| 狂野欧美性猛交xxxx| 久久久水蜜桃av免费网站| 午夜一级久久| 国产精品成人自拍| 亚洲国产影院| 777久久精品| 国产亚洲一区二区手机在线观看| 日韩国产91| 久久久一本精品| 亚洲一区欧美| 麻豆精品国产91久久久久久| 激情欧美一区二区三区| 日本va欧美va精品发布| 成人在线网站| 日本不卡视频在线观看| 日韩一区二区三区免费播放| 免费看黄色91| 日韩免费视频| 18国产精品| 丝袜av一区| 91大神在线观看线路一区| 国产精品一卡| 欧美影院三区| 国产精品99精品一区二区三区∴ | 成人午夜精品| 亚洲不卡视频| 久久精品一区二区不卡| 国产日本精品| 亚洲一区中文| 波多野结衣久久精品| 亚洲精选久久| 久久精品免费一区二区三区 | 成人片免费看| 日韩精品a在线观看91| 亚洲欧美综合| 九九九精品视频| 亚洲精品韩国| 黄色日韩精品| 日韩精品不卡一区二区| 国产精品一区二区三区av| 性色一区二区| 91精品精品| 国产一区调教| 国产欧美一区| 日本大胆欧美人术艺术动态| 久久久蜜桃一区二区人| 风间由美中文字幕在线看视频国产欧美| 99亚洲视频| 日韩国产网站| 国产成人精品福利| 欧美自拍一区| 在线免费观看亚洲| 激情婷婷综合| 亚洲天堂一区二区| 精品国产不卡一区二区| 国产欧美日韩在线一区二区| 亚洲视频电影在线| 9色精品在线| 在线日韩中文| 欧美日韩一二三四| 丝袜诱惑一区二区| 精品中文字幕一区二区三区| 欧美一级全黄| 91嫩草精品| 日韩在线网址| 一区二区国产在线| 亚洲欧美日韩国产综合精品二区| 欧美大黑bbbbbbbbb在线| 婷婷激情一区| se01亚洲视频 | 亚洲高清久久| 国产精品99免费看| 在线成人动漫av| 欧洲在线一区| 成人羞羞视频播放网站| 日韩影院二区| 日韩在线欧美| 欧美成a人免费观看久久| 成人免费网站www网站高清| 新版的欧美在线视频| 福利一区二区| 中文字幕一区久| 91tv亚洲精品香蕉国产一区| 91精品一区国产高清在线gif | 欧美激情网址| 麻豆国产精品一区二区三区| 精品亚洲成人| 国产aⅴ精品一区二区四区| 国产成人精品免费视| 国产精品yjizz视频网| 国产在线观看www| 亚洲va中文在线播放免费| 欧美丝袜一区| 午夜欧美精品| 石原莉奈在线亚洲三区| 天堂va在线高清一区| 国产视频网站一区二区三区| 日韩福利视频导航| 国产伦精品一区二区三区视频| 国产精品色在线网站| 嫩呦国产一区二区三区av| 精品国产亚洲一区二区三区大结局| 国产在线一区不卡| 久久激情一区| 午夜在线精品偷拍| 日韩av中文在线观看| 老牛国内精品亚洲成av人片| 一区二区三区四区日本视频| 欧美精选一区二区三区| 老司机久久99久久精品播放免费| 天堂va在线高清一区| 久久av中文| 日韩伦理在线一区| 一本一道久久a久久精品蜜桃| 老司机久久99久久精品播放免费| 日韩欧美在线精品| 动漫av一区| 国产一区日韩一区| 中文字幕一区日韩精品| 国产精品三级| 欧美中文一区二区| 婷婷精品在线观看| 日韩av免费大片| 国产精品美女久久久| 日韩激情网站| 精品国产不卡一区二区| 一区在线视频观看| 日本精品一区二区三区在线观看视频 | 亚洲特级毛片| 中文字幕日韩欧美精品高清在线| 国产精品一在线观看| 波多野结衣久久精品| 日韩精品一级中文字幕精品视频免费观看 | 国产精品嫩草影院在线看| 国产高清视频一区二区| av在线日韩| 日韩欧美中文字幕电影| 成人欧美一区二区三区的电影| 免费在线观看视频一区| 欧美a级一区二区| 亚洲欧美日韩国产综合精品二区| 国产九九精品| 国精品一区二区| 欧美私人啪啪vps| 欧美日韩在线网站| 欧美日韩亚洲一区二区三区在线| 在线观看精品| 久久国产三级精品| 欧美亚洲国产激情| 日韩精品久久理论片| 日本精品在线中文字幕| 日韩成人午夜精品| 久久美女精品| 欧美激情五月| 快she精品国产999| 久久男人天堂| 日韩国产一二三区| 欧美1级日本1级| 麻豆国产精品一区二区三区| 久久福利一区| 天堂а√在线最新版中文在线| 日韩精品一区二区三区中文字幕| 久久久久免费av| 国产精品一区二区三区www| 亚洲一级特黄| 久久99蜜桃| 免费人成网站在线观看欧美高清| 亚洲女同av| 国产情侣一区| 久久亚洲风情| 99精品美女| 岛国精品一区| 国产毛片精品久久| 亚洲久久一区| 午夜影院欧美| 高清一区二区三区av| 亚洲tv在线| 99riav国产精品| 日韩毛片在线| 精品一区视频| 欧美日韩一区二区高清| 麻豆久久精品| 欧美91视频| 久久国产日本精品| 日本久久综合| 久久伊人国产| 亚洲免费影院|