我在Ubuntu 13.10和Postgres上使用Django 1.6和Python 3.3.
我的模型User
定义如下:
from django.db import models from django.contrib.auth.models import AbstractUser from common.mixins import TimestampMixin class User(TimestampMixin, AbstractUser): auth_key = models.CharField(max_length=16) def __str__(self): if self.first_name: if self.last_name: return "{0} {1}'s Profile".format( self.first_name, self.last_name) else: return "{0}'s Profile".format(self.first_name) else: return "{0}'s Profile".format(self.username)
我测试__str __
如下:
from django.test import TestCase from accounts.models import User from common.tests.fixtureless import create_instance class UserTest(TestCase): def test_str(self): initial = { 'username': 'test_username', 'first_name': 'test_first_name', 'last_name': 'test_last_name', } user = create_instance(User, **initial) user.save() expected = "test_first_name test_last_name's Profile" self.assertEqual(user.__str__(), expected) user.delete() del(initial['last_name']) user = create_instance(User, **initial) user.save() expected = "test_first_name's Profile" self.assertEqual(user.__str__(), expected) user.delete() del(initial['first_name']) user = create_instance(User, **initial) user.save() expected = "test_username's Profile" self.assertEqual(user.__str__(), expected) user.delete()
我可以在大约20%的时间内正确运行我的测试套件.但是,有时我会收到以下故障:
ERROR: test_str (blind_tiger.blind_tiger.apps.accounts.tests.UserTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/backends/util.py", line 53, in execute return self.cursor.execute(sql, params) psycopg2.ProgrammingError: relation "accounts_user" does not exist LINE 1: INSERT INTO "accounts_user" ("password", "last_login", "is_s... ^ The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/ricomoss/workspace/ses/blind_tiger/blind_tiger/settings/../apps/accounts/tests/models.py", line 18, in test_str user.save() File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/models/base.py", line 545, in save force_update=force_update, update_fields=update_fields) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/models/base.py", line 573, in save_base updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/models/base.py", line 654, in _save_table result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/models/base.py", line 687, in _do_insert using=using, raw=raw) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/models/manager.py", line 232, in _insert return insert_query(self.model, objs, fields, **kwargs) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/models/query.py", line 1511, in insert_query return query.get_compiler(using=using).execute_sql(return_id) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/models/sql/compiler.py", line 898, in execute_sql cursor.execute(sql, params) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/backends/util.py", line 53, in execute return self.cursor.execute(sql, params) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/utils.py", line 99, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/utils/six.py", line 490, in reraise raise value.with_traceback(tb) File "/home/ricomoss/.virtualenvs/blind_tiger/lib/python3.3/site-packages/django/db/backends/util.py", line 53, in execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation "accounts_user" does not exist LINE 1: INSERT INTO "accounts_user" ("password", "last_login", "is_s...
这是令人沮丧的,因为如果我放置一个try/except
犯罪,user.save()
所以我可以检查对象,我从来没有看到这个错误.
永远不会产生此错误:
try: user.save() except: raise Exception(user.__dict__)
有什么建议?