Use*_*ser 95 django optimization foreign-keys django-models
有没有办法使用模型的整数id设置外键关系?这将用于优化目的.
例如,假设我有一个Employee模型:
class Employee(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
type = models.ForeignKey('EmployeeType')
Run Code Online (Sandbox Code Playgroud)
和
EmployeeType(models.Model):
type = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
我希望拥有无限制员工类型的灵活性,但在部署的应用程序中,可能只有一种类型,所以我想知道是否有办法对id进行硬编码并以这种方式设置关系.这样我就可以避免db调用来获取EmployeeType对象.
Wil*_*rdy 195
是的:
employee = Employee(first_name="Name", last_name="Name")
employee.type_id = 4
employee.save()
Run Code Online (Sandbox Code Playgroud)
ForeignKeyfields将其值存储_id在末尾的属性中,您可以直接访问该属性以避免访问数据库.
a的_id版本ForeignKey是Django的一个特别有用的方面,每个人都应该在适当的时候知道和使用它.
警告:
@RuneKaagaard指出,employee.type在最近的Django版本中,即使在调用之后employee.save()(它保持其旧值)也不准确.使用它当然会破坏上述优化的目的,但我更希望一个偶然的额外查询不正确.所以要小心,只有在完成对实例的处理时才使用它(例如employee).
Jac*_*nda 39
使用create创建对象并将其保存到一行中的数据库的替代方法:
employee = Employee.objects.create(first_name='first', last_name='last', type_id=4)
Run Code Online (Sandbox Code Playgroud)