19

新しいモデルを作成するときに、外部キーのモデル インスタンスを渡す必要がないようにする方法はありますか? 次のモデルがあるとします。

class Foo(models.Model):
    description = models.CharField(max_length=100)

    class Meta:
         db_table = u'foo'

class Bar(models.Model):
    info = models.CharField(max_length=100)
    foo = models.ForeignKey('Foo')

    class Meta:
         db_table = u'bar'

ポスト リクエストが後でビューに入ってくると、foo レコードの ID がわかっているので、レコードを bar テーブルに挿入したいだけです。

私が行った場合:

new_bar = Bar(info="something important", foo=foo_id)
new_bar.save()

「"546456487466L" を割り当てられません: "Bar.foo" は単に "Foo" インスタンスであるという ValueError が表示されます。

わかりました... Foo モデルの実際のインスタンスが必要です。Foo を取得してから渡すことができることを理解しています。しかし、この機能をオーバーライドする方法が必要なようです。グーグルでドキュメントを読んだり、管理者の raw_id_fields が基本的な考え方のようです。(つまり、ここで生の ID を許可します)。ただし、このオプションは ForeignKey フィールドには表示されません。

オブジェクトを取得してIDを取得するためにデータベースへのラウンドトリップを行う必要があるのは非常に非効率的です(私はすでに持っています)。往復を行うと、IDがデータベースに存在することが検証されることを理解しています。しかし、ちょっと...それが私がRDBMSを使用していて、そもそも外部キーを持っている理由です。

ありがとう

4

1 に答える 1

25
new_bar = Bar(info="something important", foo_id=12345)
new_bar.save()

外部キーの値を直接取得することもできます。ある種の最適化。

于 2012-05-16T16:53:33.803 に答える