有没有一种方法可以使用模型的整数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并以这种方式设置关系,这样我就可以避免首先调用db来获取EmployeeType对象。
3条答案
按热度按时间iq3niunx1#
没错
ForeignKey
字段将它们的值存储在一个末尾带有_id
的属性中,您可以直接访问该属性以避免访问数据库。ForeignKey
的_id
版本是Django的一个特别有用的方面,每个人都应该知道并在适当的时候不时使用。警告:[〈Django 2.1 ]
@RuneKaagaard指出
employee.type
在最近的Django版本中是不准确的,即使在调用了employee.save()
之后(它保持了它的旧值)。使用它当然会使上述优化的目的落空,但我更希望意外的额外查询是不正确的。所以要小心,只有当你完成了你的示例(例如employee
)时才使用它。注意:正如@humcat在下面指出的,该错误已在Django 2.1中修复
2q5ifsrm2#
使用create创建对象并将其保存到数据库中的一行的替代方法:
s4n0splo3#
只是为了强调一些关于公认答案的东西(基于我的经验):当您希望在外键的"id"字段中添加一个值时(希望这是明确的),您必须在您在该类中定义的名称的末尾添加"_id"。
在本例中:employee =员工(名字="姓名",姓氏="姓名",类型**_id**= 4)
这里的"type"是指"Employee"类中定义的"type"。
请注意,如果您已经定义了类似"foo_id"的内容,您仍然必须添加"_id"后缀,结果将是"foo_id_id"
PS:我无法评论或做其他操作(没有足够的信誉点)