2013-02-06 88 views
0

在我的模型,我有:如何從django模型表單中的直通模型中獲取數據?

class StudentProfile(models.Model): 
    # Relational fields 
    #more fields 
    sports_assigned = models.ManyToManyField('Sport', through="StudentSportAssociation") 

而且我的模型形式,如:

class UpdateStudentForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(UpdateStudentForm, self).__init__(*args, **kwargs) 
    class Meta: 
     model = StudentProfile 
    sports_assigned = forms.ModelMultipleChoiceField(queryset=SportWithLevel.objects.all(), 
                widget=FilteredSelectMultiple("Select", is_stacked=False), required=True) 

的穿透式表:

class StudentSportAssociation(AbstractBaseModel): 
    """ 
    Association of student to a sport and his current level in the sport 
    """ 
    sport = models.ForeignKey('Sport') 
    level = models.ForeignKey('Level') 
    student = models.ForeignKey('StudentProfile', related_name="sports_with_levels") 
    # save and all follows 

現在我需要訪問

StudentSportAssociation

「through」表訪問表單時。 現在它從體育模型中獲取值。 可以做任何事情來打破這種正常的方式,並獲得通過表的細節?

+0

你測試過'self.instance'嗎?另外,你想要做什麼? – danihp

+0

這裏的關聯模型是StudentProfile。當我嘗試在表單中使用它(StudentProfile)時,我需要通過StudentProfile中的sports_assigned列獲取通過表(StudentSportAssociation)中的數據。那就是我想在我的模型窗體UpdateStudentForm中使用StudentProfile模型時,在「sports_with_levels」而不是「sports_assigned」中擁有數據。 –

回答

0

看看這部分的django文檔: https://docs.djangoproject.com/en/1.4/topics/db/models/#extra-fields-on-many-to-many-relationships。 特別閱讀最後兩個例子。他們描述如何獲得中間對象。

概括起來講,你有兩個選擇:

1.Get中級車型有一個單獨的查詢

StudentSportAssociation.objects.filter(student=student_profile_instance) 

2.You查詢的許多一對多反向關係。你的情況:

student_profile_instance.sports_with_levels.all() 

「sports_with_levels」既然你定義的related_name如果你不定義一個那就是:

student_profile_instance.studentsportassociation_set.all() 

Django的默認添加了「_set」的型號名稱。

相關問題