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'

このデータベーステーブルには、2つの主キーと1つの外部キーがあります。Djangoモデルはこの種のデータベーステーブルを処理しますか?

ここに画像の説明を入力してください

4

2 に答える 2

4

まず、どのテーブルも 2 つの主キーを持つことはできません。それは不可能です。あなたのものには、2つの列で構成される主キーがあると仮定しid_categoryますid_file_context.

残念ながら、Django は現在、複合主キーを持つモデルをサポートしていません。主キーとして厳密に 1 つの列を持つテーブルしか処理できません。

<plug type="shameless">Djangoでこれを可能にするための作業が進行中です </plug>

それ以外は、ForeignKeys は Django で完全に問題なく、テーブルに他の問題は見られません。

于 2011-11-04T11:21:31.610 に答える
2

koniiiik は、複合主キーについて非常に興味深い回答をもたらしました。

しかし、モデルの定義を見ると、本当に2つの主キーが必要かどうかわかりませんが、次のように1つの外部キーと1つの主キーだけが必要です。

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 に答える