1

私は最初の Django プロジェクトを行っており、サードパーティ プログラムのレガシー DB と格闘しています。DB には、私が把握しようとしている 1 つのセクションについて、少し変わったテーブル構造があります。

基本的なテーブル レイアウトは次のとおりです。

PERSON
------
z_pk int primary key,
z_name text 

SPOUSEREL
---------
z_person int foreign_key(person.z_pk)
z_spouserel int

たとえば、PERSON には以下が含まれます。

1, John Smith
2, Maggie Brown
3, Bob Johnson
4, Sarah Lee

SPOUSEREL には次のものが含まれます。

1, 50
2, 50
1, 55
4, 55

これは、ジョン・スミスが「結婚番号 50」でマギー・ブラウンと結婚し、ジョン・スミスが「結婚番号 55」でサラ・リーとも結婚したことを示しています。50 と 55 という数字は、結婚を示すためにある人から別の人へのリンクを作成するだけの数字であり、他の関連性はありません。

ManyToManyFieldさまざまなとの組み合わせを試しましたForeignKey。例:

class Spouserel(models.Model):
    z_persons = models.ManyToManyField(Person, db_column='z_pk')
    z_spouserels = models.ManyToManyField("self")

しかし、成功しませんでした。実行しようとしているクエリを確認すると、ID フィールドが必要な Django でルックアップが失敗していますが、存在しません。「スルー」を使用することを考えましたが、この場合、それ自体を通過する必要がありますか?

これでどこに行くべきかわかりません。

4

1 に答える 1

0

私はあなたのモデルがこれらのようであるべきだと思います

class Person(models.Model):
    z_pk = models.AutoField(primary_key=True)
    z_name = models.TextField()

class Spouserel(models.Model):
    z_person = models.ForeignKey(Person, db_column='z_pk', primary_key=True)
    z_spouserel = models.IntegerField()

ノート

Spouserel モデルは、修正というよりハックに似ています。現在、Django の動作では、モデル フィールドの 1 つを主キーとして指定する必要があります。そのようなフィールドが見つからない場合は、自動フィールドが自動的に追加されますid。モデルを機能させるには、任意のフィールドを主キーに指定する必要があります。Django は を見つける必要があるだけですprimary_key=True。詳細については、このスレッドを参照してください。

于 2014-05-18T05:53:04.410 に答える