Python ModelForeign键无法创建链接到Django中对象的列id
我不明白为什么Python ModelForeign键无法创建链接到Django中对象的列id,python,django,attributes,models,Python,Django,Attributes,Models,我不明白为什么ForeignKey在我的models.py中不起作用 我严格遵循了教程,我所需要做的就是将游戏作为部门的一部分(与选择和投票的一部分相同)。相同的游戏可以是不同部门的一部分 这是我的型号.py的代码: from django.db import models class Department(models.Model): name = models.CharField(max_length=200) def __unicode__(self):
ForeignKey
在我的models.py
中不起作用
我严格遵循了教程,我所需要做的就是将游戏
作为部门
的一部分(与选择
和投票
的一部分相同)。相同的游戏可以是不同部门的一部分
这是我的型号.py的代码:
from django.db import models
class Department(models.Model):
name = models.CharField(max_length=200)
def __unicode__(self):
return self.name
class Game(models.Model):
department = models.ForeignKey(Department)
name_of_the_game = models.CharField(max_length=200)
def __unicode__(self):
return self.name_of_the_game
我创建了SQLite表,并完成了教程中的所有操作
这就是它在python shell中给我的错误:
>>> from logins.models import Department, Game
>>> p = Department.objects.get(pk = 1)
>>> p.game_set.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 71, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 96, in __iter__
self._fetch_all()
File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 854, in _fetch_all
self._result_cache = list(self.iterator())
File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 220, in iterator
for row in compiler.results_iter():
File "/Library/Python/2.7/site-packages/django/db/models/sql/compiler.py", line 710, in results_iter
for rows in self.execute_sql(MULTI):
File "/Library/Python/2.7/site-packages/django/db/models/sql/compiler.py", line 781, in execute_sql
cursor.execute(sql, params)
File "/Library/Python/2.7/site-packages/django/db/backends/util.py", line 69, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/Library/Python/2.7/site-packages/django/db/backends/util.py", line 53, in execute
return self.cursor.execute(sql, params)
File "/Library/Python/2.7/site-packages/django/db/utils.py", line 99, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/Library/Python/2.7/site-packages/django/db/backends/util.py", line 53, in execute
return self.cursor.execute(sql, params)
File "/Library/Python/2.7/site-packages/django/db/backends/sqlite3/base.py", line 450, in execute
return Database.Cursor.execute(self, query, params)
OperationalError: no such column: logins_game.department_id
>>来自logins.models导入部门,游戏
>>>p=Department.objects.get(pk=1)
>>>p.game_set.all()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第71行,在__
数据=列表(自身[:报告输出大小+1])
文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第96行,在iter中__
self._fetch_all()
文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第854行,全部
self.\u result\u cache=list(self.iterator())
迭代器中的文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第220行
对于编译器.results\u iter()中的行:
文件“/Library/Python/2.7/site packages/django/db/models/sql/compiler.py”,第710行,在results\u iter中
对于self.execute_sql(多)中的行:
文件“/Library/Python/2.7/site packages/django/db/models/sql/compiler.py”,第781行,在execute_sql中
cursor.execute(sql,params)
文件“/Library/Python/2.7/site packages/django/db/backends/util.py”,执行中的第69行
返回super(CursorDebugWrapper,self).execute(sql,params)
文件“/Library/Python/2.7/site packages/django/db/backends/util.py”,执行中的第53行
返回self.cursor.execute(sql,params)
文件“/Library/Python/2.7/site packages/django/db/utils.py”,第99行,在退出时__
6.重新播放(dj_exc_类型、dj_exc_值、回溯)
文件“/Library/Python/2.7/site packages/django/db/backends/util.py”,执行中的第53行
返回self.cursor.execute(sql,params)
文件“/Library/Python/2.7/site packages/django/db/backends/sqlite3/base.py”,执行中的第450行
返回Database.Cursor.execute(self、query、params)
操作错误:没有这样的列:logins\u game.department\u id
也许我只是错过了一些非常基本的步骤,但即使在阅读了Django网站上的相关文档后,我似乎也无法理解 您是否创建了数据库表,然后更改了模型
Django没有保持数据库和模型的同步,你要么需要使用South,或者在更改模型时销毁并重建数据库。在定义模型后是否运行了python manage.py syncdb
命令。py
?似乎在创建数据库后修改了数据库架构
如果没有任何数据,您需要迁移应用程序或重新创建数据库。
要迁移应用,请尝试。要重新创建数据库,例如,如果您正在使用SQLite,只需删除设置中指定的数据库文件,然后再次运行syncdb
命令。您是如何创建表的?同步数据库?是否在执行syncdb后添加了外键?是的,我创建了它!我在创建foreignKeys=之前就做了,这就是为什么我感到困惑的原因:/因此,如果表中没有任何数据,我建议您删除它们并再次运行syncdb。从长远来看,我建议你像@krs所说的那样使用南方。非常感谢。我会试试,或者删除数据库。我怎么删除它呢?哇,那花了一段时间@龙骑士非常感谢你的帮助!对不起,我的问题可能很傻,我是django和数据库的新手。但是成功了!:)是的,我做到了!我甚至重拨了好几次来检查。一切都是从头开始的。我真的不确定,为什么它不起作用:/也许我应该在方括号中为ForeignKey或其他东西添加一些id?运行syncdb
后,您似乎已经更改了模型。再次尝试运行syncdb
,看看是否出现相同的错误。我先创建了模型,然后创建了数据库。这就是问题所在:(不确定,为什么它不想识别它,这是我创建数据库时得到的结果:开始;创建表“logins\u department”(“id”integer Not NULL主键,“name”varchar(200)Not NULL);创建表“logins\u game”(“id”integer Not NULL主键,“department\u id”)整数不为空引用“登录部门”(“id”),“游戏名称”varchar(200)不为空;提交;