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()

我收到一个 ValueError 说“无法分配”546456487466L”:“Bar.foo”只是一个“Foo”实例。

所以,我明白了……它希望我有一个 Foo 模型的实际实例。我知道我可以在 Foo 上做一个 get 然后将它传递进去。但是,似乎必须有一种方法来覆盖这个功能。我做了一些谷歌搜索和阅读文档,管理员中的 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 回答