web-dev-qa-db-ja.com

Djangoモデルは、外部キーを別のモデルのフィールドに設定します

Djangoに別のモデルのfieldに外部キーを設定する方法はありますか?

たとえば、ValidationRuleオブジェクトがあるとします。また、別のモデルのどのフィールドを検証するかを定義するルールが必要です(ヌルにできるかどうか、データタイプ、範囲など、その他の情報も同様です)。

このフィールドレベルのマッピングをdjangoに保存する方法はありますか?

25
Cory

私はこれを試していませんが、Django 1.0以降、次のようなことができるようです:

class Foo(models.Model):
    foo = models.ForeignKey(Bar, to_field='bar')

このドキュメントは here です。

82
Monika Sulik

はいといいえ。 FK関係はクラスレベルで記述され、データベースのFK関連付けを反映しているため、FKパラメータに直接追加情報を追加することはできません。

代わりに、他のテーブルのフィールド名を保持する文字列を用意することをお勧めします。

class ValidationRule(models.Model):
    other = models.ForeignKey(OtherModel)
    other_field = models.CharField(max_length=256)

このようにして、フィールドを次のように取得できます。

v = ValidationRule.objects.get(id=1)
field = getattr(v, v.other_field)

(1対多ではなく)多対多のフィールドを使用している場合、カスタムの中間テーブルを作成して through オプションでメタデータを保持するための組み込みサポートがあります。

18
Jarret Hardie