По какой-то причине, когда я был новичком в Python и Django, я написал несколько операторов import, таких как это, в верхней части файла models.py:
from django.contrib import auth
И я бы использовал его вот так:
class MyModel(models.Model):
user = models.ForeignKey(auth.models.User)
# ...
Это работало нормально.Спустя долгое время я написал пользовательскую команду управления, и она сделала бы это:
from myapp.models import MyModel
Когда я запустил свою пользовательскую команду (python manage.py my_command
), это привело бы к тому, что Python пожаловался, что модуль auth
не было атрибута models
в строке, объявляющей ForeignKey
в models.py.
Чтобы обойти эту проблему, я изменил свой models.py на более обычный:
from django.contrib.auth.models import User
class MyModel(models.Model):
user = models.ForeignKey(User)
# ...
Может кто-нибудь объяснить мне, что мне не хватает?Есть ли что-то другое в среде, когда вы запускаете команду управления?Или я все время делал неправильно?Спасибо!
Редактировать : Следуя догадке dmitko о циклическом импорте, вот импорт, использованный в моем файле models.py.Я показываю исходный импорт 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
Была ли эта ситуация настроена на циклический тип импорта?