【问题标题】:Database error : no such column: connect_connect.reciever_id数据库错误:没有这样的列:connect_connect.reciever_id
【发布时间】:2011-08-02 14:34:51
【问题描述】:

我创建了以下模型

 class ConnectToFrom(models.Model):
    person = models.ForeignKey(User, null=True)
    kiosk = models.ForeignKey(Kiosks, null=True)

 class Connect(models.Model):
    parent_id = models.ForeignKey("self", null = True, blank = True)
    sender = models.ForeignKey(ConnectToFrom, related_name='sent_messages' )
    reciever = models.ForeignKey(ConnectToFrom, related_name='received_messages')
    .
    .
    .

我无法通过管理站点访问 Connects 以添加任何连接对象! 我可以不将相同的模型引用到两个字段吗? 我无法弄清楚究竟是什么导致了错误。 请帮忙

追溯:

Environment:


Request Method: GET
Request URL: http://www.example.com:8000/admin/connect/connect/

Django Version: 1.3
Python Version: 2.6.6
Installed Applications:
['broadcast',
 'shastra',
 'fb_api',
 'log',
 'nties',
 'crc',
 'connect',
 'network',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.admin',
 'kiosks',
 'content',
 'home',
 'dashboard',
 'trial',
 'meta',
 'oembed']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python26\lib\site-packages\django\core\handlers\base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "C:\Python26\lib\site-packages\django\contrib\admin\options.py" in wrapper
  307.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Python26\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  93.                     response = view_func(request, *args, **kwargs)
File "C:\Python26\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  79.         response = view_func(request, *args, **kwargs)
File "C:\Python26\lib\site-packages\django\contrib\admin\sites.py" in inner
  197.             return view(request, *args, **kwargs)
File "C:\Python26\lib\site-packages\django\utils\decorators.py" in _wrapper
  28.             return bound_func(*args, **kwargs)
File "C:\Python26\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  93.                     response = view_func(request, *args, **kwargs)
File "C:\Python26\lib\site-packages\django\utils\decorators.py" in bound_func
  24.                 return func(self, *args2, **kwargs2)
File "C:\Python26\lib\site-packages\django\contrib\admin\options.py" in changelist_view
  1159.             'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
File "C:\Python26\lib\site-packages\django\db\models\query.py" in __len__
  82.                 self._result_cache = list(self.iterator())
File "C:\Python26\lib\site-packages\django\db\models\query.py" in iterator
  273.         for row in compiler.results_iter():
File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py" in results_iter
  680.         for rows in self.execute_sql(MULTI):
File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  735.         cursor.execute(sql, params)
File "C:\Python26\lib\site-packages\django\db\backends\util.py" in execute
  34.             return self.cursor.execute(sql, params)
File "C:\Python26\lib\site-packages\django\db\backends\sqlite3\base.py" in execute
  234.             return Database.Cursor.execute(self, query, params)

Exception Type: DatabaseError at /admin/connect/connect/
Exception Value: no such column: connect_connect.reciever_id

【问题讨论】:

  • 接收者!= 接收者。您选择的拼写是否一致?
  • 是的,我使用了与“reciever”相同的拼写。虽然我现在要改变它。

标签: database django


【解决方案1】:

您是否在最初创建 connect_connect 表后将 receiver 字段添加到模型中?如果是这样,您必须手动将该字段添加到您的数据库中(Django 不会自动将您的模型的更改与您的数据库同步。)

只需启动您的交互式数据库外壳,通常是dbshell,然后添加该字段。在 MySQL 中是这样的:

ALTER TABLE connect_connect ADD COLUMN receiver_id integer;

我建议运行 manage.py sqlall appname 以查看 Django 现在如何创建您的数据库表,然后通过您的 db shell 进行必要的更改来确保数据库匹配。

【讨论】:

  • 我的模型中没有任何 reciever_id 字段。这就是我感到惊讶的地方!
  • 它是您的 receiver 字段。由于它代表 ForeignField,Django 在数据库中将其创建为 receiver_id。如果你不关心你已经拥有的数据,你可以运行manage.py reset appname 来同步你的模型和你的数据库,否则我建议你运行manage.py sqlall appname 来看看 Django 现在如何创建你的数据库表,然后确保db 通过您的 db shell 进行必要的更改来匹配它。
  • 当我执行 sqlall 时,它显示 reciever_id 作为一个字段:“reciever_id”整数 NOT NULL REFERENCES“connect_connecttofrom”(“id”)
  • 应该,因为receiver 现在显然在您的模型中。您现在需要启动您的 db 交互式 shell 并使用这些 SQL 语句添加该和所有相关字段,以便您的 db 和您的模型同步。
  • 4 个月后,精彩的回答帮助了我。谢谢楼主!
猜你喜欢
  • 1970-01-01
  • 2016-02-15
  • 2013-07-13
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 2014-01-06
  • 2012-03-08
  • 1970-01-01
相关资源
最近更新 更多