manage.py shell和相对导入

时间:2014-03-01 15:04:13

标签: django

我正在尝试使用“manage.py shell”加载以下Python文件。 manage.py脚本位于父目录中,我正在使用包含该脚本的目录中的execfile('forms.py')。

from django.forms import ModelForm
from .models import Profile

class ProfileSearchForm(ModelForm):
    class Meta:
        model = Profile
        fields = ['name']

由于显式相对导入而失败:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "forms.py", line 2, in <module>
    from    .models         import    Profile
ImportError: No module named models

但如果我切换到隐式相对导入,它可以工作:

from django.forms import ModelForm
from apps.myprofile.models import Profile

class ProfileSearchForm(ModelForm):
    class Meta:
        model = Profile
        fields = ['name']

我的问题是我认为明确的相对导入是好东西(参见Two Scoops),我仍然认为它们是。

但现在我需要一个与manage.py一起使用的解决方法。

1 个答案:

答案 0 :(得分:0)

你需要在python shell中进行相对导入之前更改当前目录。所以这可能有效:

import os
os.chdir('apps/')
from django.forms import ModelForm
from .models import Profile