django中的子查询

django中的子查询,django,subquery,Django,Subquery,我有两种型号: class Professors(models.Model): professors_name = models.CharField('professor', max_length=32, unique=True) class Discipline(models.Model): auditorium = models.IntegerField('auditorium') professors_name = models.ForeignKey(Profess

我有两种型号:

class Professors(models.Model):
    professors_name = models.CharField('professor', max_length=32, unique=True)
class Discipline(models.Model):
    auditorium = models.IntegerField('auditorium')
    professors_name = models.ForeignKey(Professors)
在以下观点中:

disciplines = Discipline.objects.all()

所以,我有礼堂的数量和教授的姓名id。但我需要的是教授的全名,而不是id。怎么做?

Django ORM将始终返回对象,而不是id。你应该有这样的设计

class Professor(models.Model):
    name = models.CharField('professor', max_length=32, unique=True)
class Discipline(models.Model):
    auditorium = models.IntegerField('auditorium')
    professor = models.ForeignKey(Professors)
并使用
学科.professor.name
单独检索名称。

模型:

# models usually named in the singular
class Professor(models.Model):
    professors_name = models.CharField('professor', max_length=32, unique=True) 
class Discipline(models.Model):
    auditorium = models.IntegerField('auditorium')
    # your pointer is to a professor, not to the name
    professor = models.ForeignKey(Professor)
鉴于:

# select_related('professor') to avoid a second query when accessing professor
disciplines = Discipline.objects.select_related('professor')
模板:

{% for disc in disciplines %}
{{ disc.auditorium }}: {{ disc.professor.name }}
{% endfor %}
对于值:

Discipline.objects.values('auditorium', 'professor__name')

我使用规程=规程.对象.值('auditorium','rudiction.professor.name'),但它不起作用,因为它不是@Siva的意思。如果使用trictions=trictions.objects.all(),则该查询集中的每个实例都有一个通过trictions.professor.name的教授名称