2012-10-19 55 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