Table doesn't exist
Closed this issue · 2 comments
smyrman commented
The following code fails:
from django_fake_model import models as f
from django.db import models
from django import test
class Foo(f.FakeModel):
name = models.CharField(max_length=128)
class Bar(f.FakeModel):
name = models.CharField(max_length=128)
foo = models.ForeignKey(Foo, null=True, related_name="bars")
@Foo.fake_me
@Bar.fake_me
class RestLaterFilterTests(test.TestCase):
@classmethod
def setUpClass(cls):
fs = [
Foo.objects.create(name='f0'),
... more code ...
Versions:
- Django version: 1.8.5
- Python version: 3.4.4
- django-fake-model version: 0.1.4
Traceback:
Traceback (most recent call last):
File "/home/user/src/apps/rest_layer/tests.py", line 24, in setUpClass
Foo.objects.create(name='f0'),
File "/usr/local/lib/python3.4/site-packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/local/lib/python3.4/site-packages/django/db/models/query.py", line 348, in create
obj.save(force_insert=True, using=self.db)
File "/usr/local/lib/python3.4/site-packages/django/db/models/base.py", line 734, in save
force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python3.4/site-packages/django/db/models/base.py", line 762, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/usr/local/lib/python3.4/site-packages/django/db/models/base.py", line 846, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/usr/local/lib/python3.4/site-packages/django/db/models/base.py", line 885, in _do_insert
using=using, raw=raw)
File "/usr/local/lib/python3.4/site-packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/local/lib/python3.4/site-packages/django/db/models/query.py", line 920, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 974, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/utils.py", line 97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/mysql/base.py", line 124, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 220, in execute
self.errorhandler(self, exc, value)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorvalue
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 209, in execute
r = self._query(query)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 371, in _query
rowcount = self._do_query(q)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 335, in _do_query
db.query(q)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/connections.py", line 280, in query
_mysql.connection.query(self, query)
django.db.utils.ProgrammingError: (1146, "Table 'django_db.django_fake_models_foo' doesn't exist")
erm0l0v commented
Hello, thank you for your issue. Please try to change base class from TestCase
to TransactionTestCase
. For more details check #1 issue.
smyrman commented
I tried to use TransactionTestCase now, but seams setUpClass(cls) is called before the models gets faked. Tried changing to setUp(self)/tearDown(self) as well, but that gives me a series of other failures, including:
Error for first test case:
Traceback (most recent call last):
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 182, in __call__
self._pre_setup()
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 777, in _pre_setup
super(TransactionTestCase, self)._pre_setup()
File "/usr/local/lib/python3.4/site-packages/django_fake_model/case_extension.py", line 15, in _pre_setup
self._map_models('create_table')
File "/usr/local/lib/python3.4/site-packages/django_fake_model/case_extension.py", line 28, in _map_models
getattr(model, method_name)()
File "/usr/local/lib/python3.4/site-packages/django_fake_model/models.py", line 32, in create_table
schema_editor.create_model(cls)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 91, in __exit__
self.execute(sql)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 111, in execute
cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/utils.py", line 97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/mysql/base.py", line 124, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 220, in execute
self.errorhandler(self, exc, value)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorvalue
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 209, in execute
r = self._query(query)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 371, in _query
rowcount = self._do_query(q)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 335, in _do_query
db.query(q)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/connections.py", line 280, in query
_mysql.connection.query(self, query)
django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint')
Subsequent tests fails with
Traceback (most recent call last):
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 182, in __call__
self._pre_setup()
File "/usr/local/lib/python3.4/site-packages/django/test/testcases.py", line 777, in _pre_setup
super(TransactionTestCase, self)._pre_setup()
File "/usr/local/lib/python3.4/site-packages/django_fake_model/case_extension.py", line 15, in _pre_setup
self._map_models('create_table')
File "/usr/local/lib/python3.4/site-packages/django_fake_model/case_extension.py", line 28, in _map_models
getattr(model, method_name)()
File "/usr/local/lib/python3.4/site-packages/django_fake_model/models.py", line 32, in create_table
schema_editor.create_model(cls)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 286, in create_model
self.execute(sql, params or None)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 111, in execute
cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.4/site-packages/django/db/utils.py", line 97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/utils.py", line 62, in execute
return self.cursor.execute(sql)
File "/usr/local/lib/python3.4/site-packages/django/db/backends/mysql/base.py", line 124, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 220, in execute
self.errorhandler(self, exc, value)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorvalue
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 209, in execute
r = self._query(query)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 371, in _query
rowcount = self._do_query(q)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/cursors.py", line 335, in _do_query
db.query(q)
File "/usr/local/lib/python3.4/site-packages/MySQLdb/connections.py", line 280, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (1050, "Table 'django_fake_models_bar' already exists")
I am sorry, but so far I have spent to many payed hours to work on this, and am afraid I need to move on and use real models for my tests. Best of luck with the project:-)