我有一个由学说/symfony1.4 生成的 mysql 数据库,我需要一个单独的 django 1.4 项目来引用同一个 mysql 数据库上的现有表。该数据库由许多面向客户端的 UI 共享,并且无法迁移或复制,symfony 和 django 都需要引用/更新同一数据库上的相同表,以便面向客户端的 UI 保持同步。不幸的是,首先出现了学说,并在这些表之间创建了约束名称和索引名称,我找不到如何强制 django 使用相同的名称。当我尝试将这些现有表包装在 django 对象中时,这会导致崩溃。
任何想法如何覆盖或强制 django 1.4 模型使用特定的外键约束名称和索引?
更新:添加有关表设置和崩溃的更多信息
学说架构:
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 }
表 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类:
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;
崩溃(在 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'")