Django OneToOneField - 我应该把它放在哪个模型中?

2024-01-30

假设我们有以下模型。

class A(Model): pass
class B(Model): pass

那么以下之间没有区别:

在模型A中:b = OneToOneField(B, related_name=A.__name__)

and

在模型 B 中:a = OneToOneField(A, related_name=B.__name__)

那么我应该问自己什么问题来决定是否将 OTO 放入一种模型或另一种模型中。我的意思是像 has-a、is-a 等等。


实际上,一对一字段的放置位置有所不同,因为删除的行为不同。当您删除一个对象时,与该对象具有一对一关系的任何其他对象都将被删除。相反,如果您删除包含一对一字段的对象(即它引用其他对象,但其他对象没有引用回它),则不会删除其他对象。

例如:

class A(models.Model):
    pass

class B(models.Model):
    a = models.OneToOneField(A)

如果删除 A,默认情况下 B 也会被删除(尽管您可以通过修改on_delete论点OneToOneField就像外键 https://docs.djangoproject.com/en/stable/ref/models/fields/#django.db.models.ForeignKey.on_delete)。删除 B 不会删除 A(尽管您可以通过覆盖delete()方法B)。

回到最初的 has-a 与 is-a 问题,如果 A 有 B,则 B 应该具有一对一字段(B 仅应在 A 存在时才存在,但 A 可以在没有 B 的情况下存在)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django OneToOneField - 我应该把它放在哪个模型中? 的相关文章

随机推荐

  • 脚本在 PyCharm 中运行,但不是从命令行运行

    当我尝试从 PyCharm IDE 运行我的程序时 一切正常 但如果我输入 Fedora python myScript py 在 shell 提示符中 我从模块 1 中收到导入错误 ImportError No modue named m
  • 使用 Spring MVC 的 ResponseEntity 返回流

    我有一个 Spring MVC 方法 它返回一个ResponseEntity 根据检索到的具体数据 有时需要返回一个数据流给用户 有时它会返回流以外的其他内容 有时还会返回重定向 我绝对希望这是一个流而不是字节数组 因为它可能很大 目前 我
  • 如何在设备上部署aab文件?

    在我的 Android 应用程序中 如果我想更新 APK 文件 我会使用以下命令 adb install r some my apk 好的 是工作 现在我签署了我的捆绑包 结果是 Android Studio 3 5 产生 AAB Andr
  • 在 Javascript 中获取派生构造函数的名称

    在下面的示例中是否可以获取派生 类 的名称 我想以某种方式让输出为 ChildClass 但它是 ParentClass function ParentClass this name Bob function ChildClass this
  • 如何修复错误“无法解析列...”

    我正在开发基于 Spring Framework MySQL JPA 的 Java Web 应用程序 当我尝试将数据从 HTML 表单持久化到 SQL 数据库时遇到问题 然后我尝试调试和修复 我在用IntelliJ IDEA 旗舰版 201
  • 动作过滤器的 ASP.NET MVC 测试

    如何为操作过滤器编写测试用例 我正在使用表单身份验证 我有用 RequiresAuthentication 操作过滤器装饰的基本控制器 当我执行控制器的测试用例时 我没有从 cookie 中获取登录用户的数据 我正在使用起订量 它是否提供了
  • 如何使 System.in 输入流读取 utf-8 字符?

    这是我的代码 public class MyTestClass public static void main String args throws Exception Scanner scanner new Scanner System
  • 自动缩进换行文本

    这里有点菜鸟 但我基本上希望文本在换行时自动缩进 所以而不是 Peter piper picked a peck of pickled peppers 这将是 Peter piper picked a peck of pickled pep
  • 将一个值分解为两个幂的结果

    是否有可能获得作为 2 的幂的结果形成一个值的整数 Example 129 resolves 1 128 77 resolves 1 4 8 64 我已经考虑过使用 Math log 并使用按位比较器执行 foreach 还有其他更漂亮的解
  • 如何在 Geany 中调试 C?

    我已经用谷歌搜索过它 但我得到的每个结果都说 从插件管理器添加调试器插件 但没有任何调试器插件的选项 我怎么解决这个问题 我用的是Ubuntu Geany 插件管理器仅列出已安装插件 尽管有这个名称 但您实际上无法从插件管理器安装插件 只能
  • Firefox 3.0 + 中的 SQLite 存储

    我有一个支持 Firefox 3 的 Firefox 扩展 SQLite 数据库对我的扩展很重要 我看见在 MDN 上 https developer mozilla org en StorageAPI 可能会发生变化并且它 解冻 我应该担
  • 使用创建图像共享 API 和 /ugcPosts 端点创建的帖子在我的时间轴上的 linkedin 上不可见

    我已经使用下面描述的创建图像共享 api 实现了在 linkedin 上共享图像帖子的所有三个步骤 但创建的帖子在我的 linkedin 提要 帖子或最近的活动中不可见 https learn microsoft com en us lin
  • 如何在不关闭当前Firebase会话的情况下创建用户身份验证[重复]

    这个问题在这里已经有答案了 我想创建一个系统 管理员可以从电子邮件创建用户身份验证 我已经按照文档所述进行了开发 但当前会话已关闭 我只想创建身份验证来获取 uid 然后使用我想要存储的数据在数据库中创建一个用户 这就是我所拥有的 var
  • Iframe 是否创建单独的执行上下文?

    我正在用 js 编写一个 html 解析器 它可以处理和操作很多节点 我想分摊开销 这样就不会导致用户界面冻结 我考虑过使用 web Worker 但它没有 DOM 访问权限 所以目前我正在使用setTimeout 0 在我的循环中不冻结
  • Google Translation API id 因请求过多而阻止 IP 地址

    我正在设置一个Django从 API 请求产品数据的视图 使用以下命令解析它们BeautifulSoup 应用googletrans模块并将响应保存到我的 Postgresql 数据库中 昨天一切都工作正常 直到突然 Google 阻止了对
  • 添加到向量时在析构函数内部进行双重释放

    嘿 我正在使用鼓机 并且遇到矢量问题 每个序列都有一个样本列表 并且样本在向量中排序 然而 当样本在向量上被push back时 样本的析构函数被调用 并导致双重释放错误 这是示例创建代码 class XSample public Uint
  • 如何仅使用一个上下文菜单从不同标签复制文本

    我有一个用于联系人列表的 Windows 窗体程序 我已经有一个用于从 DataGridView 复制和粘贴的上下文菜单 但是 我希望能够右键单击标签并从上下文菜单中选择复制以复制该一个标签中的数据 我有 10 个不同的标签 我不需要全部
  • 评估条件表达式

    我有一个场景 我将 if 条件作为字符串保存在数据库中 例如 String condition age gt 28 nationality US OR String condition age gt 28 现在 我想评估用户是否已输入条件句
  • 获取 Google App Engine 发布版本的来源

    我可以从 Google 下载 App Engine 源代码吗 Update Google appengine 现在允许您下载代码 文档在这里 http code google com appengine docs python tools
  • Django OneToOneField - 我应该把它放在哪个模型中?

    假设我们有以下模型 class A Model pass class B Model pass 那么以下之间没有区别 在模型A中 b OneToOneField B related name A name and 在模型 B 中 a One