当前位置: 首页 > 面试题库 >

Django:使用整数设置外键?

屠锦
2023-03-14
问题内容

有没有一种方法可以使用模型的整数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对象


问题答案:

是的:

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)使用此功能。



 类似资料:
  • 问题内容: 我想稍微远离PHP,学习Python。为了使用Python进行Web开发,我需要一个框架来帮助模板和其他事情。 我有一台非生产服务器,用于测试所有Web开发内容。这是一个运行MariaDB而不是常见的MySQL服务器软件包的Debian 7.1 LAMP堆栈。 昨天我安装了Django并创建了我的第一个项目firstweb。我尚未更改任何设置。 这是我的第一个大困惑。在教程中,我跟随那

  • 问题内容: 我正在尝试使用Eclipse设置Django。现在,我正在创建一个新的Pydev Django项目,并收到“找不到Django”错误消息。 当我尝试通过命令行验证Django是否集成时,它可以工作。 我刚好有两个python安装,分别是2.7和3.2,而且我确定我正在使用Eclipse(和命令行)中的2.7。我究竟做错了什么? 问题答案: 如果在安装django之前添加了python解

  • 问题内容: 我已经在Django中创建了一个不错的数据库,并且希望通过网站内容之外的一些python脚本进行交互,因此我很好奇是否可以在Django之外使用Django数据库API网站,如果有的话,有没有人知道如何实现此目的?Google并没有为此带来很多成功。 问题答案: 在进行任何调用(包括导入模型)之前,你只需要配置Django设置即可。像这样: 同样,请确保在运行之前运行该代码,例如: 然

  • 问题内容: 但是,我可以仅在AWS(Elasticache)上创建Redis实例并将其端点添加到Django设置中吗?例如,使用Django- redis : 我怀疑以上情况可能会导致多个beantalk服务器实例出现问题。鉴于此,鉴于有一个显式编写的用于与AWS Elasticache for Memcache接口的Django包,我很想使用MemCache而不是Redis:django- el

  • 外键 (Foreign Key)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接,这个列就成为第二个表的外键。外键的作用如下: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,就是当你对一个表的数据进行操作,和他有关联的一个或更多表的数据能够同时发生改变。 外键可以是一对一的,一个表的记录只能

  • 问题内容: 我想知道是否有可能在Java中使用String.format方法给出一个在零之前的整数? 例如: 1将变为001 2将变为002 … 11将变为011 12将变为012 … 526将保留为526 … 目前,我尝试了以下代码: 不幸的是,它在数字之前带有3个空格。可以在数字前加零吗? 问题答案: 使用格式说明为整数。的装置,该数目将是零填充,如果它是少于三个(在这种情况下)位。 有关其他