我在抽象模型中创建created_by和modified_by字段。
Django版本:1.4.3
Python版本:2.7.3
根据文档,我创建了我的抽象类:
# base.py
class MyModel(models.Model):
created_by = models.ForeignKey('userdata.Profile',
related_name=
'%(app_label)s_%(class)s_created_by',
default=1)
modified_by = models.ForeignKey('userdata.Profile',
related_name=
'%(app_label)s_%(class)s_modified_by',
default=1)
class Meta:
abstract = True
我在所有模型中继承了这个模型,大约有50个模型。
syncdb - 确定
南 - 好
runserver - 确定
我通过SQLite Manager查看我的表,一切看起来都很好。
我登录管理站点并打开我的任何表格,然后得到:
Traceback:
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\core\handlers\base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\contrib\admin\options.py" in wrapper
366. return self.admin_site.admin_view(view)(*args, **kwargs)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\utils\decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\views\decorators\cache.py" in _wrapped_view_func
89. response = view_func(request, *args, **kwargs)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\contrib\admin\sites.py" in inner
196. return view(request, *args, **kwargs)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\utils\decorators.py" in _wrapper
25. return bound_func(*args, **kwargs)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\utils\decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\utils\decorators.py" in bound_func
21. return func(self, *args2, **kwargs2)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\contrib\admin\options.py" in changelist_view
1233. 'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\db\models\query.py" in __len__
85. self._result_cache = list(self.iterator())
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\db\models\query.py" in iterator
291. for row in compiler.results_iter():
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\db\models\sql\compiler.py" in results_iter
763. for rows in self.execute_sql(MULTI):
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\db\models\sql\compiler.py" in execute_sql
818. cursor.execute(sql, params)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\db\backends\util.py" in execute
40. return self.cursor.execute(sql, params)
File "I:\xxx\virtualenvs\fff-2\lib\site-packages\django-1.4.3-py2.7.egg\django\db\backends\sqlite3\base.py" in execute
344. return Database.Cursor.execute(self, query, params)
Exception Type: DatabaseError at /admin/userdata/address/
Exception Value: at most 64 tables in a join
我的问题是:你能看到这个例子有什么错误吗? 我的问题2:SQLite是否仅限于64个连接?在Postgres上会没事的吗?
EDITE:
是的,当我打开列表视图管理面板中的任何模型时,就会发生这种情况
我从所有list_displays中删除了created_by和modified_by。在使用SQLite的本地mashine和使用Postgres的服务器上没有帮助
所有测试都是正确的。
答案 0 :(得分:1)
事实上,当doc指出时,Sqlite3将连接数限制为64个表。最有可能的是,使用其他数据库引擎,你会没事的。
答案 1 :(得分:1)
SQLite documentation表示它们最多只能连接64个。
当发生这种情况时,你会看到哪个管理员视图?我假设它是列表视图?
您可以通过手动指定要在管理中使用
显示的字段来忽略列表显示中的两个外键字段答案 2 :(得分:1)
我不得不从list_display中删除每个关系,而不仅仅是created_by和modified_by。然后在视图中创建新的colummns,例如:
class MyModelAdmin(admin.ModelAdmin):
list_display = ('level', 'description', '_parent', '_created_by',
'_modified_by')
def _parent(self, obj):
return "%s" % obj.parent
_parent.short_description = 'Parent'
def _created_by(self, obj):
return "%s" % obj.created_by
_created_by.short_description = 'Created By'
def _modified_by(self, obj):
return "%s" % obj.modfied_by
_modified_by.short_description = 'Modified By'