我有一个名为" 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;,即类名?
答案 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。