以前にこの質問をしましたが、解決策が得られなかったので、今回は質問を簡潔かつ明確にするよう努めました。
私のデータベースには、次の簡略化されたスキーマがあります。
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 を持つことができ、userlanguageversion は多くの languagecode を持つことができ、flag は多くの languagecode を持つことができます。
select_relatedを使用しても、1 対多の関係のために flag.flagIconPath が返されないため、Django のドキュメントには、1 対多の外部キーの関連名を使用して prefetch_related を使用する必要があると記載されています。
だから私は自分のコードを私の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 %}
しかし、このコードは何も返しません。
自分が何を間違えたのかわからないので、誰かアドバイスをいただけますか?