一尘不染

Django:使用整数设置外键?

django

有没有一种方法可以使用模型的整数ID设置外键关系?这将出于优化目的。

例如,假设我有一个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)

我希望拥有无限的员工类型的灵活性,但是在部署的应用程序中可能只有一个类型,所以我想知道是否有一种方法可以对ID进行硬编码并以此方式设置关系。这样,我可以避免通过数据库调用先获取EmployeeType对象。


阅读 325

收藏
2020-03-27

共1个答案

一尘不染

是的:

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

ForeignKey字段将它们的值存储在最后一个属性中_id,你可以直接访问该属性以避免访问数据库。

a的_id版本ForeignKey是Django的一个特别有用的方面,每个人都应该在适当的时候不时知道和使用。

警告:

@RuneKaagaard指出employee.type,即使在调用之后,在最新的Django版本中此后也不准确employee.save()(它保持其旧值)。使用它当然会破坏上述优化的目的,但是我宁愿偶然的额外查询而不是错误的查询。因此请小心,仅在完成实例处理后(例如employee)使用此功能。

2020-03-27