繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM