我已经测试过“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 Model处理这种数据库表吗?
答案 0 :(得分:3)
首先,没有表可以有两个主键。那是不可能的。我假设您的主键由两列id_category
和id_file_context
组成。
不幸的是,Django目前不支持具有复合主键的模型,它只能处理只有一列作为主键的表。
<plug type="shameless">
目前正在努力通过Django实现这一目标,请参阅https://code.djangoproject.com/ticket/373以及我在上一次Google Summer of Code中的工作:https://github.com/koniiiik/django </plug>
除此之外,ForeignKey
对于Django来说完全没问题,我发现你的桌子没有其他问题。
答案 1 :(得分:2)
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;
希望它有所帮助:)