0

すべてのテーブルのすべてのインスタンスにオブジェクト インスタンスが必要でした。これを行うには、1 対 1 の主キー フィールドが適しているように見えました。以下の小さな例のように。

from util.fields import BigAutoField,BigForeignKey
from django.db import models


class Common_document(models.Model):
    pk = models.OneToOneField("Type_object", primary_key=True, related_name="common_document_content_pk")
    author = models.ManyToManyField("Type_object", related_name = 'common_document_author',
                                 limit_choices_to = {"Common_document_author_author":"Type_object"} ,null = True,
                                 through = 'Common_document_author', blank = True)
    #....

class Common_document_author(models.Model):
    pk = models.OneToOneField("Type_object", primary_key=True, related_name="common_document_author_pk")
    document = BigForeignKey("Common_document", related_name='Common_document_author_document')
    author = BigForeignKey("Type_object", related_name='Common_document_author_author')


class Type_object(models.Model):
    id = BigAutoField(primary_key=True)
    #....
    # Some of the fields are m2m

ただし、これにより次のエラーが発生しました。

django.core.management.base.CommandError: 1 つ以上のモデルが検証されませんでした: schema.common_document: 中間モデル Common_document_author には Type_object への複数の外部キーがありますが、これはあいまいで許可されていません。

document_author テーブルの pk フィールドをコメントアウトすると、このエラーは解消されます。djangoが魔女オブジェクトFKを使用するかわからないため、エラーが発生すると思います。これを修正するにはどうすればよいですか? m2mフィールドで使用されるm2mテーブルのフィールドをdjangoに伝える方法はありますか?

私はおそらくこのようにそれをするつもりはありません。m2m テーブルはおそらくオブジェクト インスタンスを持つ必要はありませんが、これを行う方法を知りたいです。

4

1 に答える 1

0

私はあなたの動機を理解していないと思います。外部キーをプライマリ インデックスとして使用する理由は何ですか? 確かに、それをインデックスに登録しますが、プライマリですか?. その名前を 'pk' から変更することもできます。Django は 'pk' というフィールドについて仮定を行っていると確信しています。

于 2013-01-17T18:57:58.103 に答える