I have a mysql database that was generated by doctrine/symfony1.4 and I require a separate django 1.4 project to reference existing tables on the same mysql database. The database is shared by many client facing UIs and cannot be migrated or copied, both symfony and django need to reference/update the same tables on the same database so that the client facing UIs are in sync. Unfortunately, doctrine was there first and created constraint names and index names between these tables and I can't find how to force django to use the same names. This causes crashes when I try to wrap these existing tables in django objects.
Any ideas how to overwrite or force django 1.4 models to use specific foreign key constraint names as well as indexes?
UPDATE: adding more info about the table setup and crash
doctrine schema:
Feature:
actAs: [Timestampable]
columns:
name: { type: string(100) }
description: { type: string(200) }
pivotXpos: { type: float, notnull: true }
pivotYpos: { type: float, notnull: true }
referenceImageUrl: { type: string(200), notnull: true }
referenceThumbnailImageUrl: { type: string(200), notnull: true }
bbox_minx: { type: float, notnull: true }
bbox_miny: { type: float, notnull: true }
bbox_maxx: { type: float, notnull: true }
bbox_maxy: { type: float, notnull: true }
relations:
Curve:
local: id
foreign: feature_id
cascade: [delete]
type: many
Curve:
actAs: [Timestampable]
columns:
name: { type: string(100), notnull:true}
feature_id: { type: bigint, notnull: true }
relations:
Feature: { onDelete: CASCADE, local: feature_id, foreign: id,
foreignAlias: Curves }
table sql
CREATE TABLE feature (id BIGINT AUTO_INCREMENT,
name VARCHAR(100), description VARCHAR(200),
pivotxpos FLOAT(18, 2) NOT NULL,
pivotypos FLOAT(18, 2) NOT NULL,
referenceimageurl VARCHAR(200) NOT NULL,
referencethumbnailimageurl VARCHAR(200) NOT NULL,
bbox_minx FLOAT(18, 2) NOT NULL,
bbox_miny FLOAT(18, 2) NOT NULL,
bbox_maxx FLOAT(18, 2) NOT NULL,
bbox_maxy FLOAT(18, 2) NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
PRIMARY KEY(id)) ENGINE = INNODB;
CREATE TABLE curve (id BIGINT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
feature_id bigint NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
INDEX feature_id_idx (feature_id),
PRIMARY KEY(id)) ENGINE = INNODB;
ALTER TABLE curve ADD CONSTRAINT curve_feature_id_feature_id
FOREIGN KEY (feature_id) REFERENCES feature(id) ON DELETE CASCADE;
django classes:
class Feature(models.Model):
class Meta:
db_table = 'feature'
name = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
description = models.CharField(max_length=100)
pivotXpos = models.FloatField()
pivotYpos = models.FloatField()
pivotXpos = models.FloatField()
referenceImageUrl = models.CharField(max_length=200)
referenceThumbnailImageUrl = models.CharField(max_length=200)
bbox_minx = models.FloatField()
bbox_miny = models.FloatField()
bbox_maxx = models.FloatField()
bbox_maxy = models.FloatField()
def __unicode__(self):
return self.name;
class Curve(models.Model):
class Meta:
db_table = 'curve'
name = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
feature_id = models.ForeignKey(Feature)
def __unicode__(self):
return self.name;
the crash (inside the django shell)
>>> Curve.objects.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/django/db/models/query.py", line 72, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/django/db/models/query.py", line 87, in __len__
self._result_cache.extend(self._iter)
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/django/db/models/query.py", line 291, in iterator
for row in compiler.results_iter():
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 763, in results_iter
for rows in self.execute_sql(MULTI):
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 818, in execute_sql
cursor.execute(sql, params)
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/django/db/backends/util.py", line 40, in execute
return self.cursor.execute(sql, params)
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 114, in execute
return self.cursor.execute(query, args)
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/Users/a/Documents/web/impression/djangodev/lib/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
DatabaseError: (1054, "Unknown column 'curve.feature_id_id' in 'field list'")