2012-04-18 3 views
1

Простите меня, если это основной вопрос, но я новичок в Django/Python и не могу найти ответ в трех книгах Django, которые у меня есть (и поиск в Google и StackOverflow). Возможно, я искал неправильную вещь.Django ListView с несколькими моделями

Как создать представление списка, которое вызывает несколько классов/моделей из моего файла model.py?

Я создал свой проект, приложение и мои модели. Модели используют отношения «один ко многим».

Я могу создать представление списка на основе вызова одной модели, но не используя несколько моделей (в этом случае 7 моделей).

Вот модели, которые я хочу назвать, с требуемыми значениями модели, которые я хочу, отображенных в ListView обозначены **:

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

Вы можете получить связанные объекты из основного. В вашем случае - перечислите список RIAchievement и получите другие данные как {{ riachievement.userLanguageVersionID.languageCodeID.languageDirectionID.textAlign }}

P.S. Кроме того, пожалуйста, форматируйте код according to pep8, даже если он автогенерируется из базы данных.

+0

ilvar, спасибо за ответ. Решение, которое вы предоставили, не работает для меня. Нужно ли мне импортировать какие-либо данные для отображения дополнительных полей? Постскриптум Я был вынужден отформатировать свой ноутбук и восстановить свой проект, поэтому этот запрос так отложен. – user1261774

+0

Нет, вам не нужен импорт. Он должен работать, потому что это довольно просто. Покажите, как вы отправляете список достижений в шаблон и как вы выполняете его в шаблоне. – ilvar

+0

Вот как я итерация: {%, если достаточное количество%} {% для д в QS%} {{}} riachievement.typeAchievementID.typeAchievementDescriptionIntl {% ENDFOR%} { % ENDIF% } – user1261774

Смежные вопросы