2014-07-07 4 views
1

Я использую MySQL, и у меня есть две модели:Confused о модели отношений ForeignKey в Django

class District(models.Model): 
    name = models.CharField(max_length=50) 

    def __unicode__(self): 
     return self.name 

class School(models.Model): 
    name = models.CharField(max_length=100) 
    school_id = models.IntegerField(default=0) 
    district = models.ForeignKey(District) 

Когда я пытаюсь запросить мою школу модель:

schools = School.objects.filter(district = 'Norfolk') 

Это говорит мне, что мне нужно использовать int(), что заставляет меня полагать, что ему нужен первичный ключевой идентификатор района, а не название района. В моем админке район школы - это строка «Норфолк», но в Sequel Pro - он перечисляет район_ид и ссылается на идентификатор района.

Я неправильно настроил свои модели? Почему я не могу просто передать название района школьной модели?

ответ

1

Если вы хотите, чтобы фильтровать по имени, вы должны использовать

schools = School.objects.filter(district__name = 'Norfolk') 

Вы должны заметить, что там может быть больше, чем один Disctrict с таким именем, как это не является ключом модели District (т.е. для него не уникальна).

+0

Работали как очарование. Благодаря! – JonnyD

+0

Это может быть хорошей идеей для вас взглянуть на раздел [Выполнение запросов] (https://docs.djangoproject.com/en/dev/topics/db/queries/) в документах django. – geekazoid

0

Вы должны быть в состоянии использовать

School.objects.filter(district__name='Norfolk') 

так, как вы в настоящее время, Django ожидал увидеть модель экземпляра класса District прошло, а не байтовой строки.

0

Посмотрите на Django docs. Вы должны использовать ForeignKey.to_field. По умолчанию используется первичный ключ для связанной модели. В этом случае это будет district_id, и вы хотите, чтобы это было name.

Смежные вопросы