Django: Установить внешний ключ с помощью целого числа?

Существует ли способ установить отношения внешнего ключа с помощью целочисленного идентификатора модели? Это было бы в целях оптимизации.

Например, предположите, что у меня есть модель Employee:

class Employee(models.Model):
  first_name = models.CharField(max_length=100)
  last_name = models.CharField(max_length=100)
  type = models.ForeignKey('EmployeeType')

и

EmployeeType(models.Model):
  type = models.CharField(max_length=100)

Я хочу гибкость наличия неограниченных типов сотрудника, но в развертываемом приложении, вероятно, будет только единственный тип, таким образом, я задамся вопросом, существует ли путь к hardcode идентификатор и установил отношения этот путь. Таким образом, я могу избежать, чтобы дб звонил для получения, EmployeeType возражают сначала.

95
задан User 17 May 2010 в 00:09
поделиться

1 ответ

Yep:

employee = Employee(first_name="Name", last_name="Name")
employee.type_id = 4
employee.save()

Поля ForeignKey хранят свое значение в атрибуте с _id в конце, к которому вы можете обращаться напрямую, чтобы избежать посещения базы данных.

Версия _id для ForeignKey является особенно полезным аспектом Django, который каждый должен знать и использовать время от времени, когда это необходимо.

предостережение:

@RuneKaagaard указывает, что employee.type не является точным в последних версиях Django, даже после вызова employee.save() (он сохраняет свое старое значение). Конечно, использование этого параметра противоречит цели вышеупомянутой оптимизации, но я предпочту случайный дополнительный запрос неправильному. Поэтому будьте осторожны, используйте его только после завершения работы над экземпляром (например, employee).

195
ответ дан 24 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: