無論出於何種原因,當我是新來的Python和Django的,我寫了一些import語句像這樣在models.py文件的頂部:使用Django管理Python的導入問題命令
from django.contrib import auth
而且我d使用它是這樣的:
class MyModel(models.Model):
user = models.ForeignKey(auth.models.User)
# ...
這工作正常。時間長了以後,我寫了一個自定義的管理命令,它會做到這一點:
from myapp.models import MyModel
當我跑我的自定義命令(),這將導致在Python抱怨模塊auth
沒有屬性models
上在models.py中聲明ForeignKey
。
要解決這個問題,我改變了我的models.py更常見的:
from django.contrib.auth.models import User
class MyModel(models.Model):
user = models.ForeignKey(User)
# ...
有人能向我解釋,我缺少的是什麼?運行管理命令時,環境中是否有不同的東西?還是我整個時間做錯了?謝謝!
編輯:繼dmitko關於循環導入的預感,以下是我的models.py文件中使用的導入。我展示的auth
原裝進口註釋掉,與一個具有外鍵auth用戶模型中唯一的模型一起:
import datetime
from django.db import models
# from django.contrib import auth
from django.contrib.auth.models import User
class UserLastVisit(models.Model):
# user = models.ForeignKey(auth.models.User, unique=True)
# ^^^^^^^^^^^^^^^^
# after adding mgmt command, error occurred here; change to the line below
user = models.ForeignKey(User, unique=True)
last_visit = models.DateTimeField(db_index=True)
而且這裏的管理命令的進口是發現問題:
import datetime
from django.core.management.base import NoArgsCommand
from core.models import UserLastVisit, AnonLastVisit, Statistic
這是否設置了循環導入類型的情況?
太棒了,謝謝你的解釋。 – 2010-09-16 23:44:36