我刚刚安装了South(0.7.3,python-2.6)并使用python解释器成功完成了教程。这意味着我能够创建一个模型并在没有任何错误的情况下进行迁移,因此South似乎在python shell中运行良好。我在本教程中使用了sqlite3数据库。
但是,当我在Eclipse中打开项目时,Eclipse无法识别迁移文件夹中与db关联的功能:0001_initial.py和0002_auto__add_field_knight_dances_whenever_able.py文件。我得到了具体的错误(导入的未定义变量:add_column,create_table,delete_column,delete_table,send_create_signal)
直到South安装,Eclipse一直在创建django应用程序。我确实将PyDev解释器指向了site-packages(C:\ python26 \ Lib \ site-packages \ south-0.7.3-py2.6.egg)下的南文件夹(其他库,如Django和django-picklefield工作)细。)
我从eclipse项目和python shell运行了一个简单的脚本,两者似乎都有相同的sys.path的
有关让Eclipse python解释器更快乐的任何提示吗?
答案 0 :(得分:19)
或者,如果您不想弄乱更改南方源文件或修饰所有迁移文件,可以将南方特定方法视为pydev代码分析中的全局方法。 您可以在以下位置更改此内容:
Preferences > PyDev > Editor > Code Analysis > Undefined
我的例外列表是:
_,tr,create_table,send_create_signal,delete_table,add_column,delete_column,alter_column,create_unique,create_index,delete_index,delete_unique,shorten_name,rename_column,execute
答案 1 :(得分:4)
一个(远非理想的)解决方案是将#@PydevCodeAnalysisIgnore
放入所有迁移中。如果到目前为止只有几个,您可以手动执行此操作。我有堆,所以我运行了以下shell命令,它会将注释添加为每个文件的第二行:
find . | grep '^.\/[a-z]*\/migrations\/.*\.py$' | xargs -I FILE sed -i '
1 a\
#@PydevCodeAnalysisIgnore
' FILE
(注意:在运行整个命令之前,您应该运行find . | grep '^.\/[a-z]*\/migrations\/.*\.py$'
以查看哪些文件sed
将被更改。您还可以运行整个命令而不使用-i
标志来查看变化本身。)
答案 2 :(得分:3)
如果您要修改south/db/__init__.py
:
--- db/__init__.py.original 2010-12-02 03:00:26.000000000 +1300
+++ db/__init__.py 2011-05-02 14:07:19.353636710 +1200
@@ -72,5 +72,9 @@
)
sys.exit(1)
-# Finally, to make old migrations work, keep 'db' around as the default database
+# Finally, to make old migrations work, keep 'db' around as the default
+# database. We're setting it explicitly to the generic operations first to
+# avoid pydev errors.
+from south.db import generic
+db = generic.DatabaseOperations(DEFAULT_DB_ALIAS)
db = dbs[DEFAULT_DB_ALIAS]