Skip to main content
 首页 » 编程设计

python之Django 1.8编程报错: relation auth_user doesn't exist when running test

2024年10月25日28wayfarer

我已经在 Stackoverflow 中阅读了有关此问题的现有答案。但没有一个对我有用。当我运行 manage.py test 时,我得到以下结果,尽管我的网站运行良好!

$ ./manage.py test --verbosity=3 
manage.py test --verbosity=3 
nosetests --with-coverage --cover-package=project.iobserve.forms,project.iobserve.models,project.iobserve.views --verbosity=3 
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$'] 
nose.plugins.cover: INFO: Coverage report will include only packages: ['project.iobserve.forms', 'project.iobserve.models', 'project.iobserve.views'] 
Creating test database for alias 'default' ('test_iobserve')... 
Got an error creating the test database: database "test_iobserve" already exists 
 
Type 'yes' if you would like to try deleting the test database 'test_iobserve', or 'no' to cancel: yes 
Destroying old test database 'default'... 
Operations to perform: 
  Synchronize unmigrated apps: mptt, djangobower, iobserve, staticfiles, twitter, messages, leaflet, allauth, facebook, multiselectfield, django_nose, rest_framework, honeypot 
  Apply all migrations: account, sessions, admin, sites, auth, contenttypes, socialaccount 
Synchronizing apps without migrations: 
Running pre-migrate handlers for application admin 
Running pre-migrate handlers for application contenttypes 
Running pre-migrate handlers for application sites 
Running pre-migrate handlers for application auth 
Running pre-migrate handlers for application sessions 
Running pre-migrate handlers for application rest_framework 
Running pre-migrate handlers for application mptt 
Running pre-migrate handlers for application djangobower 
Running pre-migrate handlers for application honeypot 
Running pre-migrate handlers for application leaflet 
Running pre-migrate handlers for application allauth 
Running pre-migrate handlers for application account 
Running pre-migrate handlers for application socialaccount 
Running pre-migrate handlers for application twitter 
Running pre-migrate handlers for application facebook 
Running pre-migrate handlers for application iobserve 
  Creating tables... 
    Creating table iobserve_person 
    Creating table iobserve_bibliographicreference 
    Creating table user_profile 
    Creating table iobserve_coordinates 
    Creating table iobserve_observingsite 
    Creating table iobserve_astronomicalorganisation 
    Creating table iobserve_building 
    Creating table iobserve_dome 
    Creating table iobserve_tool 
    Creating table iobserve_observingtool 
    Creating table iobserve_telescope 
    Creating table iobserve_toolcomponent 
    Creating table iobserve_mirror 
    Creating table iobserve_astronomicalcoordinates 
    Creating table iobserve_alias 
    Creating table iobserve_objecttype 
    Creating table iobserve_astronomicalflux 
    Creating table iobserve_astronomicalobject 
    Running deferred SQL... 
Traceback (most recent call last): 
  File "manage.py", line 7, in <module> 
    execute_from_command_line(sys.argv) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv 
    super(Command, self).run_from_argv(argv) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv 
    self.execute(*args, **cmd_options) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute 
    super(Command, self).execute(*args, **options) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/commands/test.py", line 90, in handle 
    failures = test_runner.run_tests(test_labels) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django_nose/runner.py", line 350, in run_tests 
    result = self.run_suite(nose_argv) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django_nose/runner.py", line 297, in run_suite 
    addplugins=plugins_to_add) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/nose/core.py", line 121, in __init__ 
    **extra_args) 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 95, in __init__ 
    self.runTests() 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/nose/core.py", line 207, in runTests 
    result = self.testRunner.run(self.test) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/nose/core.py", line 50, in run 
    wrapper = self.config.plugins.prepareTest(test) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/nose/plugins/manager.py", line 99, in __call__ 
    return self.call(*arg, **kw) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/nose/plugins/manager.py", line 167, in simple 
    result = meth(*arg, **kw) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django_nose/plugin.py", line 76, in prepareTest 
    self.old_names = self.runner.setup_databases() 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django_nose/runner.py", line 533, in setup_databases 
    return super(NoseTestSuiteRunner, self).setup_databases() 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/test/runner.py", line 166, in setup_databases 
    **kwargs 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/test/runner.py", line 370, in setup_databases 
    serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True), 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/db/backends/base/creation.py", line 368, in create_test_db 
    test_flush=not keepdb, 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/__init__.py", line 120, in call_command 
    return command.execute(*args, **defaults) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 179, in handle 
    created_models = self.sync_apps(connection, executor.loader.unmigrated_apps) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 317, in sync_apps 
    cursor.execute(statement) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
  File "/Users/onekiloparsec/.virtualenvs/iobs-debug/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute 
    return self.cursor.execute(sql) 
django.db.utils.ProgrammingError: relation "auth_user" does not exist 

唯一有问题的行是我的模型中 UserProfile 和用户之间的关系。在 UserProfile 模型下面。我还单独地、顺序地运行了 makemigrations 和 migrate 等等。但是当我运行测试时,它失败了。我真的不知道。任何帮助将不胜感激!

from django.conf import settings 
from django.db import models 
 
from allauth.account.models import EmailAddress 
from allauth.socialaccount.models import SocialAccount 
 
import hashlib 
 
class UserProfile(models.Model): 
    class Meta: 
        db_table = 'user_profile' 
        app_label = 'iobserve' 
 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile') 
 
    def __unicode__(self): 
        return "{}'s profile".format(self.user.username) 
 
    def account_verified(self): 
        if self.user.is_authenticated: 
            result = EmailAddress.objects.filter(email=self.user.email) 
            if len(result): 
                return result[0].verified 
        return False 
 
    def profile_image_url(self): 
        fb_uid = SocialAccount.objects.filter(user_id=self.user.id, provider='facebook') 
        if len(fb_uid): 
            return "http://graph.facebook.com/{}/picture?width=40&height=40".format(fb_uid[0].uid) 
        return "http://www.gravatar.com/avatar/{}?s=40".format(hashlib.md5(self.user.email).hexdigest()) 

请您参考如下方法:

您的 iobserve 应用没有任何迁移,并且您不能从未迁移的应用到已迁移的应用建立关系,例如 OneToOneField。

您需要运行 manage.py makemigrations iobserve 来为 iobserve 应用程序创建初始迁移。只有当初始迁移存在时,没有任何应用标签的 manage.py makemigrations 才会为该应用创建新的迁移。