如何获取外键对象值?

时间:2016-07-05 04:35:07

标签: python django foreign-key-relationship relationships

我有3张表如下。 用户表有学生信息。 LecMst表有讲座信息。 LecReq表中有学生已注册的讲座信息。

models.py

class User(models.Model):    
    usn = models.CharField(max_length=20, primary_key=True, verbose_name='usn')
    nm = models.CharField(max_length=50, blank=True, null=True, verbose_name='name')
    userid = models.CharField(max_length=20, blank=True, null=True, verbose_name='ID')

class LecMst(models.Model):
    leccode = models.CharField(max_length=15,  null=False, primary_key=True, verbose_name='lecture_code')
    lecname = models.CharField(max_length=100,  null=True, verbose_name='lecture_name')

class LecReq(models.Model):
    leccode_id = models.ForeignKey(LecMst,  db_column='leccode', verbose_name='lecture_code', related_name = 'lecreqs')
    usn_id = models.ForeignKey(User, db_column='usn', verbose_name='usn', related_name = 'lecreqs')

students_by_lecture.html显示特定班级的学生列表。 除了leccode_id,usn_id之外,我想要显示学生姓名和讲座名称的页面。

lectures.py

def student_list_by_lecture(request):

    qs_leccode = request.GET['leccode']

    if qs_leccode:

        qs = LecReq.objects.filter(leccode_id=qs_leccode)

        paginator = Paginator(qs, 25) # Show 25 posts per page
        page = request.GET.get('page')
        try:
            lecture_members = paginator.page(page)
        except PageNotAnInteger:
            lecture_members = paginator.page(1)
        except EmptyPage:
            lecture_members = paginator.page(paginator.num_pages)

    return render(request, 'students_by_lecture.html', {
        'lecture_members' : lecture_members,
        'qs_leccode' : qs_leccode,
    }) 

以下是students_by_lecture.html 我能输入什么????。

 <table>
    <thead>
        <tr>
            <th>Lecture Code</th>
            <td>Lecture Name</td>
            <td>Student Name</td>
            <td>Student No (usn)</td>
        </tr>
    </thead>
    <tbody>{% for member in lecture_members %}
        <tr>
        <td>{{ member.????? }}</td>
        <td>{{ member.????? }}</td>
        <td>{{ member.????? }}</td>
        <td>{{ member.????? }}</td>
        </tr>{% endfor %}
    </tbody>
</table>                            

3 个答案:

答案 0 :(得分:1)

可以轻松访问相关对象:

{{ member.leccode_id.lecname }}

有关Django Docs: Lookups that span relationships的更多信息。

请注意,您的命名约定严格来说是错误的。您应该按其实体名称leccode而不是leccode_id命名该字段,因为现在要访问您应该使用leccode_id_id的实体的ID。

答案 1 :(得分:1)

所以,我想你想要得到的是:

每个讲座内容,该讲座中注册的学生(姓名和号码)以及讲座代码。

lectures_info = LecReq.objects.prefetch_related('leccode_id', 'usn_id')

for lecture in lectures_info:
    print lecture.leccode_id.leccode
    print lecture.leccode_id.lecname
    print lecture.usn_id.nm
    print lecture.usn_id.userid

这显然是查询方面,它可能正在回答您的问题:如何访问外键字段。请根据您的要求尝试进一步操作,否则请注释,以便我可以进一步帮助您。

希望有所帮助:)

答案 2 :(得分:0)

您可以直接访问外部模型对象,如model.foreign_model_field.field

所以试试。

对于讲座名称,请尝试:{{member.leccode_id.lecname}} 对于学生姓名,请尝试:{{member.usn_id.nm}}