Существует ли способ установить отношения внешнего ключа с помощью целочисленного идентификатора модели? Это было бы в целях оптимизации.
Например, предположите, что у меня есть модель 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 возражают сначала.
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
).