Django:使用整数设置外键?

标签 django optimization django-models foreign-keys

有没有办法使用模型的整数 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)

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

最佳答案

是的:

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

ForeignKey 字段将其值存储在末尾带有 _id 的属性中,您可以直接访问该属性以避免访问数据库。

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

警告:[ < Django 2.1 ]

@RuneKaagaard 指出 employee.type 在最近的 Django 版本中并不准确,即使在调用 employee.save() 之后(它保持其旧值)也是如此。使用它当然会破坏上述优化的目的,但我更愿意意外的额外查询而不是不正确的。所以要小心,只有当你完成你的实例工作时才使用它(例如 employee)。

注意:正如@humcat 在下面指出的那样,错误已在 Django 2.1 中修复

关于Django:使用整数设置外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2846029/

相关文章:

python - 不能使用继承 Django 模型的 Meta 类来配置继承抽象模型中定义的字段

mysql - Django/MySQL 中的 1 到 1..0

python - 指示小时较小的 TimeField 的最佳方法是 'after' 小时较大的 TimeField

python - Python-social-auth 中用户名字段的问题

django - 重写保存方法以在多对多字段中添加列表

python - 如何在Django中访问上传的文件?

javascript - 优化 jquery 循环以设置宽度

python - 理解 Tensorflow 中的 while 循环

Django 测试休息框架 : APIRequestFactory vs APIClient

python - 如何进一步优化这个python脚本?