在我的模特中我有:
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
“通过”表。 现在它从Sport模型中获取值。 可以做任何事情来打破这种正常的方式并从直通表中获取细节吗?
答案 0 :(得分:0)
看一下django文档的这一部分: https://docs.djangoproject.com/en/1.4/topics/db/models/#extra-fields-on-many-to-many-relationships。 特别是阅读最后两个例子。他们描述了如何获得中间对象。
总结一下,你有两个选择:
1.使用单独的查询获取中级模型
StudentSportAssociation.objects.filter(student=student_profile_instance)
2.您查询多对多反向关系。在你的情况下:
student_profile_instance.sports_with_levels.all()
“sports_with_levels”,因为你定义了一个related_name,如果你没有定义一个,那就是:
student_profile_instance.studentsportassociation_set.all()
Django默认为模型名称添加“_set”。