Python 需要Django外国钥匙吗?

Python 需要Django外国钥匙吗?,python,sql,django,entity-relationship,one-to-many,Python,Sql,Django,Entity Relationship,One To Many,我有三门课: 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(Lo

我有三门课:

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)

当我运行这个程序时,它抱怨学生并没有外国钥匙来考试。为什么?

听起来您的实际数据库与您的模型不同步。您可以使用
manage.py syncdb
删除并重新创建数据库(最简单,但除非您使用类似的方法,否则将丢失数据),或者使用迁移工具升级现有数据库以反映新的数据模型。

admin.py
文件中,我有
inlines=[StudentsInline]
设置。这试图强制将多个学生添加到一个考试中(认为这是一对一关系的一方)。

您可以在manage.py shell上尝试:

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

我可以做到没有错误。。。在我看来不错..

你什么时候跑步<代码>manage.py syncdb?我看到的唯一一件看起来“错误”的事情是,您的
位置
FK指向一个您没有在此处列出的类(您可能指的是
位置
,而不是
位置
)@Danial:当我尝试添加考试时,它会向管理员抱怨。@Danial:这是一件疯狂的事情:我有管理员设置,可以在线添加考试和位置,并且没有错误。+1因为这是我尝试的第一件事,很可能是其他搜索者的答案。我刚刚有一个乱七八糟的
admin.py
文件。