[英]How can I properly use related_name in django models to get back the class name?
我的一个django项目中有一个名为“ school”的应用程序。
下面是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
我如何仅以“类”(即类名称)获得输出?
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.