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

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)

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

4b9b3361

Ответ 1

Да:

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

Ответ 2

Альтернатива, которая использует create, чтобы создать объект и сохранить его в базе данных в одном строка:

employee = Employee.objects.create(first_name='first', last_name='last', type_id=4)