有没有办法使用模型的整数 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 对象的 db 调用。
是的:
employee = Employee(first_name="Name", last_name="Name")
employee.type_id = 4
employee.save()
ForeignKey
字段将其值存储在以 _id
结尾的属性中,您可以直接访问该属性以避免访问数据库。
ForeignKey
的 _id
版本是 Django 的一个特别有用的方面,每个人都应该知道并在适当的时候不时使用它。
警告:[
@RuneKaagaard 指出
注意:正如@humcat 在下面指出的,该错误已在 Django 2.1 中修复
employee.type
在最近的 Django 版本中不准确,即使在调用 employee.save()
之后(它保持其旧值)。使用它当然会破坏上述优化的目的,但我宁愿意外的额外查询不正确。所以要小心,只有在您完成实例工作时才使用它(例如 employee
)。
另一种方法是使用 create 创建对象并将其保存到数据库中的一行:
employee = Employee.objects.create(first_name='first', last_name='last', type_id=4)
不定期副业成功案例分享
type
字段被写入数据库,但如果您之后访问type
属性,它不会反映更改。用代码表示,这将失败assert(employe.type.id == 4)
。_id
快捷方式是只读的,至少应该这样记录。