2012-04-18 11 views
1

これは基本的な質問ですが、私はDjango/Pythonを初めて使っていますが、私が持っている3つのDjangoの書籍(そしてGoogleとStackOverflowを検索しています)たぶん私は間違ったことを探しています。Django ListViewに複数のモデルがあります

model.pyファイルから複数のクラス/モデルを呼び出すリストビューを作成するにはどうすればよいですか?

私は自分のプロジェクトとappと私のモデルを作成しました。モデルは1対多数の関係を使用します。

複数のモデル(このシナリオでは7つのモデル)を使用せずに、単一のモデルを呼び出すことに基づいてリストビューを作成できます。私がリストビューに表示する必要なモデル値が**で示されているとここで

は、私が呼び出したいモデルです:

class TypeAchievement(models.Model): 
    typeAchievementID = models.AutoField(primary_key=True, db_column="TypeAchievementID") 
    languageCodeID = models.ForeignKey(LanguageCode, db_column="LanguageCodeID") 
    **typeAchievementDescriptionIntl = models.CharField(max_length=255, db_column="TypeAchievementDescriptionIntl")** 
    typeAchievementDescriptionEng = models.CharField(max_length=255, db_column="TypeAchievementDescriptionEng") 
    typeAchievementAltID = models.IntegerField(db_column="TypeAchievementAltID") 
    class Meta: 
    db_table="TypeAchievement" 

class RIAchievement(models.Model): 
    riAchievementID = models.AutoField(primary_key=True, db_column="RIAchievementID") 
    userLanguageVersionID = models.ForeignKey(UserLanguageVersion, db_column="UserLanguageVersionID") 
    typeAchievementID = models.ForeignKey(TypeAchievement, db_column="TypeAchievementID") 
    **riAchievementTypeUserDescription = models.CharField(max_length=255, blank=True, null=True, db_column="RIAchievementTypeUserDescription")** 
    **riAchievementDescription = models.TextField(max_length=2000, db_column="RIAchievementDescription")** 
    auth_user_id = models.ForeignKey(auth_user, db_column="auth_user_id") 
    class Meta: 
    db_table="RIAchievement" 

class UserLanguageVersion(models.Model): 
    userLanguageVersionID = models.AutoField(primary_key=True, db_column="UserLanguageVersionID") 
    auth_user_id = models.ForeignKey(auth_user, db_column="auth_user_id") 
    languageCodeID = models.ForeignKey(LanguageCode, db_column="LanguageCodeID") 
    class Meta: 
    db_table="UserLanguageVersion" 

class auth_user(models.Model): 
    **auth_user_id = models.AutoField(primary_key=True, db_column="id")** 
    username = models.CharField(max_length=30, unique=True, db_column="username") 
    first_name = models.CharField(max_length=30, db_column="first_name") 
    last_name = models.CharField(max_length=30, db_column="last_name") 
    email = models.CharField(max_length=75, db_column="email") 
    password = models.CharField(max_length=128, db_column="password") 
    is_staff = models.BooleanField(db_column="is_staff") 
    is_active = models.BooleanField(db_column="is_active") 
    is_supervisor = models.BooleanField(db_column="is_supervisor") 
    last_login = models.DateTimeField(db_column="last_login") 
    date_joined = models.DateTimeField(db_column="date_joined") 
    class Meta: 
    db_table="auth_user" 

class LanguageCode(models.Model): 
    languagecodeID = models.AutoField(primary_key=True, db_column="LanguageCodeID") 
    **languageCodeDescription = models.CharField(max_length=10, db_column="LanguageCodeDescription")** 
    baseLanguageCode = models.CharField(max_length=10, db_column="BaseLanguageCode") 
    languageNameEng = models.CharField(max_length=255, db_column="LanguageNameEng") 
    altLanguageNameEng = models.CharField(max_length=255, blank=True, null=True, db_column="AltLanguageNameEng") 
    **languageNameNative = models.CharField(max_length=255, db_column="LanguageNameNative")** 
    altLanguageNameNative = models.CharField(max_length=255, blank=True, null=True, db_column="AltLanguageNameNative") 
    **iso639_1 = models.CharField(max_length=10, blank=True, null=True, db_column="ISO639_1")** 
    iso639_2T = models.CharField(max_length=10, db_column="ISO639_2T") 
    iso639_2B = models.CharField(max_length=10, db_column="ISO639_2B") 
    iso639_X = models.CharField(max_length=10, db_column="ISO639_X") 
    languageDirectionID = models.ForeignKey(LanguageDirection, default=1, db_column="LanguageDirectionID") 
    class Meta: 
    db_table="LanguageCode" 

class LanguageDirection(models.Model): 
    languageDirectionID = models.AutoField(primary_key=True, db_column="LanguageDirectionID") 
    **languageDirectionDescription = models.CharField(max_length=20, db_column="LanguageDirectionDescription")** 
    **languageDirDescription = models.CharField(max_length=20, db_column="LanguageDirDescription")** 
    **textAlign = models.CharField(max_length=20, db_column="TextAlign")** 
    **oppositeLanguageDirectionDescription = models.CharField(max_length=20, db_column="OppositeLanguageDirectionDescription")** 
    **oppositeLanguageDirDescription = models.CharField(max_length=20, db_column="OppositeLanguageDirDescription")** 
    **oppositeTextAlign = models.CharField(max_length=20, db_column="OppositeTextAlign")** 
    class Meta: 
    db_table="LanguageDirection" 

class Flag(models.Model): 
    flagID = models.AutoField(primary_key=True, db_column="FlagID") 
    languageCodeID = models.ForeignKey(LanguageCode, db_column="LanguageCodeID") 
    **flagIconPath = models.CharField(max_length=255, db_column="FlagIconPath")** 
    flagDescription = models.CharField(max_length=255, db_column="FlagDescription") 
    flagInformation = models.CharField(max_length=255, db_column="FlagInformation") 
    class Meta: 
    db_table="Flag" 

答えて

3

あなたは、メイン1からリンクされたオブジェクトを取得することができます。あなたのケースでは、RIAchievementのリストを繰り返し、他のデータは{{ riachievement.userLanguageVersionID.languageCodeID.languageDirectionID.textAlign }}

となります。また、コードaccording to pep8もデータベースから自動生成されています。

+0

ilvar、答えに感謝します。あなたが提供したソリューションは私のために働いていません。余分なフィールドを表示するには、データをインポートする必要がありますか? P.S.私はノートパソコンをフォーマットし、プロジェクトを再構築することを余儀なくされました。そのため、この要求は非常に遅れています。 – user1261774

+0

いいえ、インポートは必要ありません。それはかなり簡単なので、動作するはずです。達成リストをテンプレートにどのように送っているのか、それをテンプレートでどのように反復しているのかを示してください。ここ – ilvar

+0

私は反復午前方法である: {%の場合適量%} ​​ {{riachievement.typeAchievementID.typeAchievementDescriptionIntl}} {%ENDFOR%} {%ENDIF% {適量%におけるQ用%} } – user1261774

関連する問題