Eclipse中的PyDev无法识别来自South的db.add_column

时间:2011-01-22 00:37:06

标签: django eclipse pydev django-south

我刚刚安装了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解释器更快乐的任何提示吗?

3 个答案:

答案 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]