2012-10-19 54 views
0

我有2种型号:子查询在Django

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() 

所以,我有礼堂和professors_name_id的数量。但我需要完整的名称,而不是id。怎么做?

回答

1

型号:

# 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') 
1

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) 

并使用discipline.professor.name单独检索名称。

+0

我使用discipl ines = Discipline.objects.values('礼堂','discipline.professor.name'),它不起作用 – tim

+0

这不是@Siva的意思。如果你使用纪律= Discipline.objects.all(),那么该查询集中的每个实例都有一个教授名称,通过discipline.professor.name –

+0

好吧,以及如何用'values'来获得教授姓名? – tim