如何在django模型中正确使用related_name来获取类名?

时间:2016-03-18 18:17:09

标签: python django

我有一个名为" school"在我的django项目中。

以下是models.py的代码

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=255)
    birthday = models.DateField(blank=True)

class Class(models.Model):
    name = models.CharField(max_length=255)
    student = models.ForeignKey(Student,related_name='classes',null=True)

    def __str__(self):
        return self.name

现在,views.py:

from django.shortcuts import render
from .models import *

def test(request):
    obj2 = Student.objects.get(name='john')
    return render(request,'test/list.html', {'obj2':obj2} )

最后,我的模板如下所示:

{% block content %}
<h2>
{{ obj2.classes }}
</h2>
{% endblock %}

在我的模板中,我使用的是obj2.classes(即responseobject.related_name)。我希望它打印类名。 但是,当我在http://127.0.0.1:8000/shop/访问该网站时, 它给了我这个输出:

shop.Class.None

如何仅将输出作为&#34; Class&#34;,即类名?

1 个答案:

答案 0 :(得分:0)

obj2._meta.get_field('classes').related_model.__name__会完成这项工作吗?这仅适用于您的视图,而不适用于模板。

def test(request):
    obj2 = Student.objects.get(name='john')
    classes_name = obj2._meta.get_field('classes').related_model.__name__
    return render(request, 'test/list.html',
                  {'obj2':obj2, 'classes_name': classes_name})

使用此方法,可以避免使用obj2.classes,它会命中数据库以检索对象。

您还可以使用obj2._meta.get_field('classes').related_model._meta.verbose_name获取verbose_name。