当我将抽象模型更改为非抽象模型然后再返回时,我遇到了makemigrations的问题 - 一些pk字段丢失了它们的序列生成器。我在主数据库中修复了它,但是迁移生成的数据库没有修复,我也不知道如何修复它,所以我只是删除数据库,删除迁移并重新开始。所以我这样做,当我运行makemigrations,或者实际上任何manage.py命令时,我得到以下错误。我已将我的urls.py文件恢复到最新提交,因为我认为我可能在那里弄乱了一些东西。
我使用的是Django 1.8.4,Python 3.4和Postgres 9.4.4.0
$ python manage.py help
Traceback (most recent call last):
File "xxx/envs/concil_3.4/lib/python3.4/site-packages/django/core/urlresolvers.py", line 394, in urlconf_module
return self._urlconf_module
AttributeError: 'RegexURLResolver' object has no attribute '_urlconf_module'
答案 0 :(得分:1)
该错误具有误导性。当你使用Django的contenttypes framework时,通常会出现这种情况。在数据库中创建此模型的内容类型记录之前执行ContentType.objects.get_for_model(MyModel)
时会发生这种情况。通常,这意味着您正在其中一个模块中执行此代码,分配给类成员(例如,使用class-based views时)等。
当Django执行系统检查时,此行正在执行并产生误导性错误。要修复它,您应该避免执行此类操作或将调用包装到this answer中描述的LazyWrapper
中,以便在首次读取变量时执行代码。像这样:
# lazy content type
mymodel_content_type = LazyWrapper(lambda: ContentType.objects.get_for_model(MyModel))
# use
def myview(request):
# ... some code
print(mymodel_content_type) # query to db is executed here on first access and cached for subsequent accesses
# ... some other code