这是一个奇怪的问题,我觉得它可能与错误有关。
在 models.py 中我创建了一个自定义验证器
def validate_accecpt_terms(value):
if value != True:
raise ValidationError(u'Sorry but you must accecpt the terms to continue')
class Sheet(SheetBase):
authorized = models.BooleanField(default=False,validators=[
validate_accecpt_terms,
])
按预期工作。但奇怪的是,我可以从 BooleanField 中删除验证器,并且验证器不再运行(按预期),但是当我删除方法 validate_accecpt_terms() ,然后对 manage.py 执行任何操作时,我会收到如下错误:
(django-proj)user@ubuntu:~/django-proj/bin/first_project$ python manage.py runserver 192.168.1.3:8001Performing system checks...
System check identified no issues (0 silenced).
Unhandled exception in thread started by <function wrapper at 0x7f8bf6fba8c0>
Traceback (most recent call last):
File "/home/user/django-initial/local/lib/python2.7/site-packages/Django-1.7.1-py2.7.egg/django/utils/autoreload.py", line 222, in wrapper
fn(*args, **kwargs)
File "/home/user/django-initial/local/lib/python2.7/site-packages/Django-1.7.1-py2.7.egg/django/core/management/commands/runserver.py", line 107, in inner_run
self.check_migrations()
File "/home/user/django-initial/local/lib/python2.7/site-packages/Django-1.7.1-py2.7.egg/django/core/management/commands/runserver.py", line 159, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "/home/user/django-initial/local/lib/python2.7/site-packages/Django-1.7.1-py2.7.egg/django/db/migrations/executor.py", line 17, in __init__
self.loader = MigrationLoader(self.connection)
File "/home/user/django-initial/local/lib/python2.7/site-packages/Django-1.7.1-py2.7.egg/django/db/migrations/loader.py", line 48, in __init__
self.build_graph()
File "/home/user/django-initial/local/lib/python2.7/site-packages/Django-1.7.1-py2.7.egg/django/db/migrations/loader.py", line 173, in build_graph
self.load_disk()
File "/home/user/django-initial/local/lib/python2.7/site-packages/Django-1.7.1-py2.7.egg/django/db/migrations/loader.py", line 103, in load_disk
migration_module = import_module("%s.%s" % (module_name, migration_name))
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/home/user/django-initial/bin/first_project/process_forms/migrations/0025_auto_20141129_0848.py", line 9, in <module>
class Migration(migrations.Migration):
File "/home/user/django-initial/bin/first_project/process_forms/migrations/0025_auto_20141129_0848.py", line 19, in Migration
field=models.BooleanField(default=False, validators=[process_forms.models.validate_accecpt_terms]),
AttributeError: 'module' object has no attribute 'validate_accecpt_terms'
in Migration
field=models.BooleanField(default=False, validators=[process_forms.models.validate_accecpt_terms]),
AttributeError: 'module' object has no attribute 'validate_accecpt_terms'
属性错误:“模块”对象没有属性“validate_accecpt_terms”
因此,为了现在使用我的应用程序而不导致 Django 崩溃,我必须使用简单的 pass 语句将该方法添加回 models.py 以满足要求:
def validate_accecpt_terms(value):
"""
After creating this method and assigning it as a validator,
If this method is ever deleted Django will crash.
So a blank method must now reside in its place. Why?
"""
pass
class Sheet(SheetBase):
authorized = models.BooleanField(default=False)
我尝试过重新启动服务器、重置数据库、syncdb、迁移.. 任何关于 Django 想法的见解以及清除这种依赖性的方法都会非常有帮助! 谢谢!!
最佳答案
事实证明,我没有尝试的一件事是删除迁移数据,这确实成功了。
关于django - 删除自定义验证器后,Django 崩溃并且无法恢复到运行备份。漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27200756/