第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Django使用外鍵進(jìn)行多次查詢

Django使用外鍵進(jìn)行多次查詢

繁華開滿天機(jī) 2021-07-08 10:35:28
假設(shè)我有兩個(gè)不同的應(yīng)用程序:teacher/models.py:  Teacher(models.Model):     name = models.CharField(max_length=300)class/models.py:  Class(models.Model):     name = models.CharField(max_length=300)     teacher = models.ForeignKey(Teacher)     students = models.ManyToManyField(Student)我想讓所有的老師上課和所有的課程都附上。我想要的結(jié)果:{[   teacher: '3L' #Teachers Id   classes: ['20L','14L','30L'] #list of Class objects or ids with the above teacher],[# similar to above]}這是可能的嗎?這就是我目前正在做的事情:classes = Class.objects.all()teachers = Teacher.objects.filter(id__in=classes.value_list('teacher',flat=True).distinct())for teacher in teachers:    classes_for_teachers = classes.objects.filter(teacher=teacher)在上面的代碼中,有四個(gè)使用循環(huán)進(jìn)行的查詢,這無疑增加了時(shí)間復(fù)雜度。有沒有更好的解決方案?提前致謝。
查看完整描述

1 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

使用prefetch_related:


teachers = Teacher.objects.prefetch_related('class_set')


# what you want is not a valid Python structure (set of lists (looking like dicts))

# list of dicts makes more sense

result = [

    {'teacher': t.pk, 'classes': t.class_set.all()}

    for t in teachers

]

無論有多少老師和班級,這只會觸發(fā) 2 db 查詢。


查看完整回答
反對 回復(fù) 2021-07-13
  • 1 回答
  • 0 關(guān)注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號