Djangoに別のモデルのfieldに外部キーを設定する方法はありますか?
たとえば、ValidationRuleオブジェクトがあるとします。また、別のモデルのどのフィールドを検証するかを定義するルールが必要です(ヌルにできるかどうか、データタイプ、範囲など、その他の情報も同様です)。
このフィールドレベルのマッピングをdjangoに保存する方法はありますか?
私はこれを試していませんが、Django 1.0以降、次のようなことができるようです:
class Foo(models.Model):
foo = models.ForeignKey(Bar, to_field='bar')
このドキュメントは here です。
はいといいえ。 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 オプションでメタデータを保持するための組み込みサポートがあります。