Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ModelForeign键无法创建链接到Django中对象的列id_Python_Django_Attributes_Models - Fatal编程技术网

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)不为空;提交;