Подтвердить что ты не робот

Экземпляр Django ForeignKey против Raw ID

Есть ли способ не передавать экземпляр модели для внешнего ключа при создании новой модели? Скажем, у меня есть следующие модели:

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 и просто хочу вставить запись в таблицу столбцов.

если:

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

Я получаю сообщение ValueError "Не могу назначить" 546456487466L ":" Bar.foo "просто будет экземпляром" Foo ".

Итак, я понял... он хочет, чтобы у меня был фактический экземпляр модели Foo. Я понимаю, что я могу просто попасть на Foo, а затем передать его. Но похоже, что должен быть способ переопределить эту функциональность. Я сделал некоторые поисковые запросы и читал документы, а raw_id_fields в admin - основная идея. (т.е. разрешить здесь сырой идентификатор). Но не смотрите эту опцию в поле ForeignKey.

Кажется очень неэффективным, чтобы сделать обратную поездку в базу данных, чтобы получить объект, чтобы получить идентификатор (который у меня уже есть). Я понимаю, что выполнение поездки в оба конца подтверждает, что идентификатор существует в базе данных. Но, эй... вот почему я использую РСУБД и в первую очередь имею внешние ключи.

Спасибо

4b9b3361

Ответ 1

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

Вы также можете получить значения внешних ключей. Некоторая оптимизация.