我测试过"inspectdb“,但我认为我的模式太复杂了,例如……对于表"tdir_files_context“(djangoinspectdb.JPG”附件中的图像“),我得到了这个模型:
class TdirFilesContext(models.Model):
id_category = models.ForeignKey(TdirCategories, db_column='id_category')
id_file_context = models.CharField(max_length=20)
n_file_context = models.CharField(max_length=150)
coment = models.CharField(max_length=2000)
id_user_db_ins = models.CharField(max_length=45)
id_user_db_upd = models.CharField(max_length=45)
id_user_sys_ins = models.CharField(max_length=45)
id_user_sys_upd = models.CharField(max_length=45)
date_ins = models.DateTimeField()
date_last_upd = models.DateTimeField()
class Meta:
db_table = u'tdir_files_context'这个数据库表有两个主键和一个外键。Django模型处理这种数据库表吗?

发布于 2011-11-04 19:21:32
首先,任何表都不能有两个主键。这是不可能的。我假设您的数据库有一个由两列组成的主键:id_category和id_file_context。
不幸的是,Django目前不支持具有复合主键的模型,它只能处理只有一列作为主键的表。
Django正在努力实现这一点,请参阅https://code.djangoproject.com/ticket/373和我在去年谷歌代码之夏中的工作:https://github.com/koniiiik/django </plug>
除此之外,ForeignKeys与Django完全兼容,我认为您的表没有其他问题。
发布于 2011-11-04 19:36:58
koniiiik刚刚给出了一个关于组合主键的非常有趣的答案。
但当我看到您对模型的定义时,我不确定您是否真的想要两个主键,而只需要一个外键和一个主键,如下所示:
class TdirCategories(models.Model):
id_category = models.AutoField(primary_key=True)
class TdirFilesContext(models.Model):
id_category = models.ForeignKey(TdirCategories, db_column='id_category')
id_file_context = models.AutoField(primary_key=True)
n_file_context = models.CharField(max_length=150)
coment = models.CharField(max_length=2000)
id_user_db_ins = models.CharField(max_length=45)
id_user_db_upd = models.CharField(max_length=45)
id_user_sys_ins = models.CharField(max_length=45)
id_user_sys_upd = models.CharField(max_length=45)
date_ins = models.DateTimeField()
date_last_upd = models.DateTimeField()
class Meta:
db_table = u'tdir_files_context'命令python manage.py syncdb可以很好地执行它,并且在python manage.py name_of_your_app_containing_the_model sql之后
你会得到一个正确的答案:
BEGIN;
CREATE TABLE "app_tdircategories" (
"id_category" integer NOT NULL PRIMARY KEY
)
;
CREATE TABLE "tdir_files_context" (
"id_category" integer NOT NULL REFERENCES "app_tdircategories" ("id_category"),
"id_file_context" integer NOT NULL PRIMARY KEY,
"n_file_context" varchar(150) NOT NULL,
"coment" varchar(2000) NOT NULL,
"id_user_db_ins" varchar(45) NOT NULL,
"id_user_db_upd" varchar(45) NOT NULL,
"id_user_sys_ins" varchar(45) NOT NULL,
"id_user_sys_upd" varchar(45) NOT NULL,
"date_ins" datetime NOT NULL,
"date_last_upd" datetime NOT NULL
)
;
COMMIT;希望它能有所帮助:)
https://stackoverflow.com/questions/8008347
复制相似问题