2010-12-08 4 views
1

У меня есть три класса:Django ForeignKey Обязательный?

class Location(models.Model): 
    name = models.CharField(max_length = 200) 

class Student(models.Model): 
    name = models.CharField(max_length = 200) 
    email = models.EmailField() 

class Exam(models.Model): 
    place = models.ForeignKey(Location) 
    taker = models.ForeignKey(Student) 
    score = models.DecimalField(max_digits = 5, decimal_places = 2) 

При запуске этого он жалуется, что студент не имеет в ForeignKey к экзамену. Зачем?

+0

При запуске что? `manage.py syncdb`? Единственное, что я вижу, что выглядит «неправильно», это то, что ваш «место» FK указывает на класс, который вы не указали здесь (вы, вероятно, имеете в виду «Место» вместо «Местоположение») – 2010-12-08 18:57:02

+0

@ Даниал: он жалуется на admin, когда я пытаюсь добавить экзамен. – 2010-12-08 18:57:54

ответ

1

Похоже, что ваша фактическая база данных не синхронизирована с вашей моделью. Вы захотите либо сбросить и воссоздать свою базу данных, используя manage.py syncdb (проще всего, но вы потеряете данные, если вы не используете что-то вроде fixtures to reload initial data) или используйте средство миграции, например South, чтобы обновить существующую базу данных, чтобы отразить новую модель данных.

0

В файле admin.py у меня было inlines = [StudentsInline] настройка. Это пытается обеспечить добавление нескольких учеников к одному экзамену (думая, что это с одной стороны отношения OneToMany).

1

Вы можете попробовать это на manage.py оболочки:

from bar import models 
l=models.Location("here") 
s=models.Student(name="fred",email="[email protected]") 
e = models.Exam(place=l,taker=s,score=99.9) 

, который я могу сделать без ошибок ... Выглядит хорошо для меня ..