我之前問過這個問題,但我沒有收到任何解決方案,所以我試圖讓這個問題簡潔明瞭些,&。新手第一次嘗試prefetch_related - 返回空白
我的數據庫具有以下簡化架構:
class RIAchievement(models.Model):
riAchievementID = models.AutoField(primary_key=True, db_column="riAchievementID")
userLanguageVersionID = models.ForeignKey(UserLanguageVersion, db_column="userLanguageVersionID", related_name="riAchievement_userLanguageVersionID")
class Meta:
db_table="riAchievement"
class UserLanguageVersion(models.Model):
userLanguageVersionID = models.AutoField(primary_key=True, db_column="userLanguageVersionID")
languageCodeID = models.ForeignKey(LanguageCode, db_column="languageCodeID", related_name="userLanguageVersion_languageCodeID")
class Meta:
db_table="userLanguageVersion"
class LanguageCode(models.Model):
languagecodeID = models.AutoField(primary_key=True, db_column="languageCodeID")
class Meta:
db_table="languageCode"
class Flag(models.Model):
flagID = models.AutoField(primary_key=True, db_column="flagID")
languageCodeID = models.ForeignKey(LanguageCode, db_column="languageCodeID", related_name="flag_languageCodeID")
flagIconPath = models.CharField(max_length=255, db_column="flagIconPath")
class Meta:
db_table="flag"
從本質上講,riachievement可以有很多userlanguageversion S和userlanguageversion可以有很多語言代碼S和標誌可以有很多語言代碼秒。
使用select_relatedflag.flagIconPath不返回,因爲1到一對多的關係,所以Django文檔狀態,我必須使用prefetch_related,與相關名稱1許多外鍵。
所以我修改我的代碼在我view.py:
from django.shortcuts import render
from app_data.models import RIAchievement
def ri_achievements(request):
qs = RIAchievement.objects.select_related("riachievement", "userlanguageversion", "languagecode", "flag_languageCodeID").all()
return render(request, 'index.html',{'qs': qs})
而且我的index.html:
{% for ri_achievement in qs %}
{{ ri_achievement.userLanguageVersionID.langaugeCodeID.flag_languageCodeID.flagIconPath }}
{% endfor %}
但是,這個代碼沒有返回。
任何人都可以提供一些建議,因爲我不明白我做錯了什麼?
Yuji,謝謝你的迴應。這給了我一個前往的方向,並解決了我遇到的一些問題。 – user1261774