首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django - Inspectdb支持这种数据库表吗?

Django - Inspectdb支持这种数据库表吗?
EN

Stack Overflow用户
提问于 2011-11-04 19:09:47
回答 2查看 1.3K关注 0票数 1

我测试过"inspectdb“,但我认为我的模式太复杂了,例如……对于表"tdir_files_context“(djangoinspectdb.JPG”附件中的图像“),我得到了这个模型:

代码语言:javascript
复制
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模型处理这种数据库表吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-04 19:21:32

首先,任何表都不能有两个主键。这是不可能的。我假设您的数据库有一个由两列组成的主键:id_categoryid_file_context

不幸的是,Django目前不支持具有复合主键的模型,它只能处理只有一列作为主键的表。

Django正在努力实现这一点,请参阅https://code.djangoproject.com/ticket/373和我在去年谷歌代码之夏中的工作:https://github.com/koniiiik/django </plug>

除此之外,ForeignKeys与Django完全兼容,我认为您的表没有其他问题。

票数 4
EN

Stack Overflow用户

发布于 2011-11-04 19:36:58

koniiiik刚刚给出了一个关于组合主键的非常有趣的答案。

但当我看到您对模型的定义时,我不确定您是否真的想要两个主键,而只需要一个外键和一个主键,如下所示:

代码语言:javascript
复制
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之后

你会得到一个正确的答案:

代码语言:javascript
复制
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;

希望它能有所帮助:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8008347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档