在Django列表视图中显示manytomany字段

时间:2017-11-13 14:39:49

标签: django

我试图在Django ListView中显示一个名为教师的多个字段的值。

目前我的模型看起来像这样:

class Classform(models.Model):

    # Fields
    name = models.CharField(max_length=255)
    slug = extension_fields.AutoSlugField(populate_from='name', blank=True)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)

    # Relationship Fields
    school = models.ForeignKey('eduly.School', default=1)
    teachers = models.ManyToManyField('eduly.Teacher', )

我的ListView看起来像这样:

class ClassformListView(GroupRequiredMixin, ListView):
    model = Classform
    group_required = [u"school_admin"]
    login_url = "/login/"
    raise_exception = True

我的列表视图模板如下所示:

<tr>
<td>{{object.pk}}</td>
<td><a href="{{object.get_absolute_url}}">{{object}}</a></td>
<td>{{ object.name }}</td>
<td>{{ object.teachers }}</td>
<td>{{ object.created }}</td>
<td>{{ object.last_updated }}</td>
</tr>

当此代码运行时,object.teachers的显示值为appname.Teacher.None

我注意到Django创建了一个名为appname_classform的表,还有一个名为&#39; appname_classform_teachers&#39; (大概是为了许多领域),但我不确定如何更改object.teachers以获得教师的名字。 &#39; appname_classform_teachers&#39;包含app name_teachers表中教师的有效条目。

1 个答案:

答案 0 :(得分:1)

使用object.teachers.all来获取实际的查询集。

- 编辑 - 以自定义方式呈现这些:

{% for objs_teacher in object.teachers.all %}
    <p>{{ objs_teacher.first_name }}</p>
    <p>{{ objs_teacher.last_name }}</p>
    ...
{% endfor %}

您可以访问循环中的不确定字段,使其看起来如您所愿。