1

我已经测试过“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 模型处理这种数据库表?

在此处输入图像描述

4

2 回答 2

4

首先,没有表可以有两个主键。那是不可能的。我只是假设您的主键由两列组成,id_category并且id_file_context.

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

<plug type="shameless">使用 Django 实现这一点的工作正在进行中,请参阅https://code.djangoproject.com/ticket/373以及我在去年 Google 代码之夏的工作:https ://github.com/koniiiik/django </plug>

除此之外,ForeignKeys 对 Django 来说非常好,我认为你的表没有其他问题。

于 2011-11-04T11:21:31.610 回答
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;

希望能帮助到你 :)

于 2011-11-04T11:36:57.700 回答