多表继承模型和相同两个模型之间的简单一对一关系有什么区别?

2024-04-14

这些实现之间有什么区别? Django 有何不同(除了继承 Metaordering and get_latest_by属性) ?

1.

# models.py
from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=50)

class Restaurant(models.Model):
    place = models.OneToOneField(Place)
    serves_pizza = models.BooleanField()

2.

class Place(models.Model):
    name = models.CharField(max_length=50)

class Restaurant(Place):
    serves_pizza = models.BooleanField()

3.

class Place(models.Model):
    name = models.CharField(max_length=50)

class Restaurant(Place):
    place = models.OneToOneField(Place, parent_link=True)
    serves_pizza = models.BooleanField()

1.你并没有真正获得任何Python继承,也就是说你不能从模型类继承/覆盖方法或属性Place在你的班级里Restaurant:

例如:

class Place(models.Model):
    name = models.CharField(max_length=50)

    def get_x(self):
        return 'x'

class Restaurant(models.Model):
    place = models.OneToOneField(Place)
    serves_pizza = models.BooleanField()

a_restaurant = Restaurant()
a_restaurant.get_x() # -> wouldn't work

这意味着要获得name一家你做不到的餐厅a_restaurant.name,您需要点击以下链接:a_restaurant.place.name

另请注意,查询时Place与相关的对象Restaurant.

a_restaurant.save()
Place.objects.get(pk=a_restaurant.pk)  # won't work

你必须写:

a_restaurant.save()
Place.objects.get(restaurant__pk=a_restaurant.pk)

2 and 3。几乎是一样的。你确实可以通过这些获得真正的Python继承。

a_restaurant = Restaurant()
a_restaurant.get_x() # would actually work and print 'x'

你的模特班Restaurant继承了一切Place:模型字段、普通实例/类属性、管理器、方法...您还可以覆盖几乎所有内容:您无法覆盖字段属性,这是不受支持的。

现在您可以直接从父模型获取字段的值:a_restaurant.name因为它们是遗传的。

由于通过这些实施Restaurant is a also Place你可以查询Place对象与Restaurant data:

a_restaurant.save()
the_place = Place.objects.get(pk=a_restaurant.pk)  
# ^ this works now and returns the equivalent `Place` instance.
the_same_restaurant = the_place.restaurant

The 不同之处如果您为该字段指定不同的名称,则在 2 和 3 之间更容易查看:

class Place(models.Model):
    name = models.CharField(max_length=50)

class Restaurant(Place):
    where = models.OneToOneField(Place, parent_link=True)
    serves_pizza = models.BooleanField()

工作原理完全相同,但要获取 a 的父位置Restaurant属性名称是where:

the_place = a_restaurant.where

with 2本来可以:

the_place = a_restaurant.place_ptr

这些意味着place = models.OneToOneField(Place, parent_link=True)只会更改父模型实例的链接名称。默认名称是'{lowercase_model_name}_ptr'.


最后一个例子:

With 1:

place1 = Place.objects.create(name='place_1')
place2 = Place.objects.create(name='place_2')
restaurant1 = Restaurant.objects.create(place=place1, serves_pizza=True)

print Place.objects.all() # prints [place1, place2]
print Restaurant.objects.all() # prints [restaurant1]

With 2-3:

place1 = Place.objects.create(name='place_1')
place2 = Place.objects.create(name='place_2')
restaurant1 = Restaurant.objects.create(name='place_3', serves_pizza=True)

print Place.objects.all() # prints [place1, place2, place3]
print Restaurant.objects.all() # prints [restaurant1]

希望这些有帮助。它长得有点太长了:/

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

多表继承模型和相同两个模型之间的简单一对一关系有什么区别? 的相关文章

  • 复制具有所有关系的 Doctrine 对象

    我想复印一份他所有亲戚的记录 我正在尝试 o Doctrine getTable Table gt Find x copy object gt copy relations o gt getRelations foreach relatio
  • django 2.0 中的错误 404 静态文件

    我试图在 django 2 0 中找到我的所有静态文件 但是当我只运行服务器时 我收到 404 错误 这是我的设置代码 STATIC URL static STATIC ROOT var www example com static STA
  • 如何在 Django 管理 UI 的文本区域中保留空行?

    我在一个对象上有一个字段 我使用 Django 3 2 管理 UI 中的文本区域来渲染它这段代码 https stackoverflow com a 431412 就像是 class MyObject models Model some t
  • 有皮茨时区列表吗?

    我想知道 Python 库 pytz 中时区参数的所有可能值是什么 怎么做 您可以列出所有可用的时区pytz all timezones In 40 import pytz In 41 pytz all timezones Out 42 A
  • IEnumerable.GetEnumerator() 和 IEnumerable.GetEnumerator()

    在 net框架中 有一个通用的IEnumerable
  • 如何将自定义迁移添加到外部 Django 应用程序

    我已经在我的自定义 Django 1 10 应用程序中对一些第三方应用程序进行了一些猴子修补 现在 当我尝试创建初始迁移时 它还会为这些外部应用程序生成迁移 但它将这些迁移放在我的 virtualenv 的站点中 packages 目录 无
  • 嵌套重组 - Django

    我有一个包含以下字段的模型 日期 员工 和 计划时间 每个员工对于不同的日期都有不同的计划工作时间 我正在尝试构建我的模板 其中员工按行列出 他们的计划工作时间列在正确的相应日期下的列中 像这样的东西 https i stack imgur
  • 使用 Serialized 属性和实现 ISerialized 之间有什么区别?

    使用有什么区别Serializable属性并实现ISerializable界面 当您使用SerializableAttribute http msdn microsoft com en us library system serializa
  • Django 与 mod_wsgi 在 apache - 500 错误:Authtype 未设置?

    尝试在 Dreamhost 上部署我的第一个 django 站点 我的这个工作正常 然后我不确定我做了什么让它停止工作 这是错误消息 crit client 74 72 99 26 configuration error couldn t
  • Django:在表单中初始化小部件时获取当前网址

    当我初始化表单以在其中找到我想要检查的字符串时 我想获取当前的 url 根据这个字符串 我想更改放入单选小部件中的数据 我想根据 url 显示不同的 radioselect 选项 class FunctionForm forms Model
  • 过滤 Django 管理选择框的模型结果

    我今天刚开始使用 Django 到目前为止发现做简单的事情相当困难 我现在正在努力解决的是过滤状态类型列表 StatusTypes 模型是 class StatusTypes models Model status models CharF
  • 将 Django OAuth2 提供程序与 JupyterHub 结合使用

    我正在尝试运行与 JupyterHub 服务器配对的 Django Web 应用程序 用户通过 Web 应用程序输入 然后在登录后获得对笔记本服务器的访问权限 为了促进这一点 我尝试使用OAuth2 其中 Django 提供身份验证 Jup
  • 使用 Django Admin 上传文件

    我希望能够使用 Django 管理界面上传 PDF 文件 并将这些文件反映在我网站的页面中 这是可能吗 如果是这样 我该怎么做 否则 管理员用户私下上传稍后将在网站中显示的文件的解决方法是什么 我从 Django 文档中得到的信息文件上传
  • Django 找不到记录器“城市”的处理程序

    我正在尝试设置 Django Citieshttps github com coderholic django cities https github com coderholic django cities使用以下命令 sudo pyth
  • 如何隐藏 django-admin 中的某些字段?

    class Book models Model title models CharField null True type models CharField author models CharField 我在 models py 中有一个
  • 从继承的受保护 Java 字段创建公共访问器

    我怎样才能完成以下工作 class Foo extends javax swing undo UndoManager increase visibility works for method override def editToBeUnd
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • Django CreateView:在验证之前设置用户

    我有一个模型 根据对象是由用户还是系统创建 对其名称字段使用不同的验证 class Symbol models Model name models CharField name unique True max length 64 creat
  • 测试中的模型 - Django 1.7 问题

    我正在尝试将我的项目移植为使用 Django 1 7 除了一件事之外 一切都很好 测试文件夹内的模型 Django 1 7 新迁移在内部运行 migrate 命令 在运行syncdb之前 这意味着如果模型未包含在迁移中 它将不会填充到数据库
  • 如何确保超类的子类方法的线程安全?

    我参加了一次面试 并被要求为以下要求设计一个课程 假设我有一个 A 类 它可以有任意数量的子类 即子类 类 A 有一个名为 doSomething 的方法 该方法是同步的 要求是 A 的所有子类都是强制性的重写 doSomething me

随机推荐

  • tkinter python 的全局变量问题

    我正在尝试创建一个简单的界面来访问具有第一个 最后一个 上一个和下一个功能的名称数组 但我用作位置跟踪器的全局变量不起作用 我已经提到过各种问题 非常感谢您的帮助 这是代码 from tkinter import Tk Label Entr
  • Google Maps API v3:地形图的自定义样式

    有谁知道是否可以为地形图创建自定义浮雕样式 显然 您可以为法线贴图创建自定义样式 但我也想更改地形的默认颜色渐变 非常感谢 您确实可以设置地形图的样式 我这里有一个 JSFiddle 演示了这一点 https jsfiddle net w7
  • Eclipse调试时断点错误如何解决?

    需要调试一个JAR文件 ProA 所以在项目中导入源代码 但是在尝试设置断点时 Eclipse 出现一个奇怪的错误 详情如下 Unable to install breakpoint due to missing line number a
  • 为什么 jQuery 1.9+ attr() 方法没有被弃用?

    作为一名 jQuery1 9 软件开发人员 我可以 弃用 使用attr 我日常工作中的方法 正如许多问题所表明的那样 prop 与 attr https stackoverflow com questions 5874652 prop vs
  • jQuery - 在函数之间共享变量

    这应该相当简单 我很确定我只是不明白 仅供参考 该网站使用 jQuery 在内容上运行 ajax load 在我的主父页面上 在标题中我有我的 nav load jQuery 代码
  • 如何从 cpp 文件修改 VS_VERSION_INFO

    当我去资源视图 gt myproject rc gt 版本 gt VS VERSION INFO我有可以更改的字段 可以通过cpp文件更改这些字段吗 所以我可以使用类似的东西 define FileDescription This is m
  • 在猫鼬中指定模式

    我想知道定义此模式的最佳方法是什么 Newsitem 只能有 1 个用户 ID 和 1 个任务 ID 一个任务可以属于多个新闻站点 一个用户可以属于多个新闻站点 我搜索过例子 但我想说的例子并不多 我怎样才能用 mongoose 和 mon
  • Node.js 中的 Json 到 csv

    我正在尝试在 node js 中将非常大的 json 转换为 csv 但它花费了太多时间 并且在转换时导致 100 cpu 占用 jsonToCsv function data var keys Object keys data 0 var
  • 在omniauth中命名的Rails路由

    我在routes rb中有这个 namespace api do namespace v1 do devise for users constraints format json controllers gt omniauth callba
  • 在 Eclipse 中调试时查看完整字符串

    在调试 Java 代码时 视图 变量 和 表达式 中的字符串仅显示到一定长度 之后 Eclipse 将显示 有什么方法可以检查整个字符串吗 这减轻了在各处添加日志语句进行调试的痛苦 在 变量 视图中 您可以右键单击 详细信息 窗格 显示字符
  • Firefox:从网页强制全屏模式

    我正在开发一个基于网络的数据库 需要通过firefox网络浏览器打开 因为一些css3元素 我希望页面以全屏模式自动打开 我不希望数据库的用户有权访问 Firefox 菜单项 无法完成如果您只是控制网页 网页中的控件不会导致浏览器实例本身发
  • TextEditingController 被废弃后被使用

    我创建了一个容器输入的表单 我循环遍历输入列表来创建表单 我的变量是 List fields label Strings firstName controller fnameController validator val gt Valid
  • 如何使用 Neo4jTemplate 进行合并而不是创建

    我当前正在迭代一个数组 其中每个索引包含两个节点和一个关系 Part 1 gt Part 2 并且我使用 Neo4jTemplate save 方法将其保存到数据库中 但是 某些索引具有与其他节点有关系的重复节点 Part 2 gt Par
  • 如何通过设备树配置 uio_dmem_genirq 驱动程序

    The uio dmem genirq https git kernel org pub scm linux kernel git stable linux stable git tree drivers uio uio dmem geni
  • 如何强制 IntelliJ 使用不同的主文件夹

    我有一台有两个硬盘的电脑 在第一个 SSD 磁盘中 我有 Windows 分区 C 在第二个磁盘 D raid 卷 中 我安装了所有程序 我还将我的用户文件夹 桌面 文档 下载 图片和视频 移动到D Users David 安装 Intel
  • 如何在 R 中使用相同的循环向量引用多个数据库?

    我需要通过组合 聚合和拆分数据帧来执行各种操作 这些行动需要连续几年重复 2000 年 2001 年 2002 年等 但是 我找不到一种方法来基于带有年份的循环字符串来引用多个数据框 一个例子 我想合并同一年的 3 个数据框 我当前的代码
  • PHP:如果在多维数组中发现重复项,则合并相邻值

    我有一些 PHP 变量集 我正在从中创建一个多维数组 现在 在该数组中 我想检查特定的键 font 对于重复项 如果发现重复项 则对应的相应值 lang and weight 应该合并 这是我到目前为止所尝试的 这会取消设置 删除数组中的重
  • 在 WPF 中创建一个简单的表?

    我想知道是否有一种方法 任何组件 控件 允许我在应用程序窗口中绘制一个简单的 Microsoft Word 样式表格 像这样的事情 有任何想法吗 这取决于您想如何使用它 要么使用其中之一ItemsControl like DataGrid
  • TDD 的 JavaScript 单元测试工具

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我研究并考虑了许多 JavaScript 单元测试和测试工具 但一直无法找到合适的选项来
  • 多表继承模型和相同两个模型之间的简单一对一关系有什么区别?

    这些实现之间有什么区别 Django 有何不同 除了继承 Metaordering and get latest by属性 1 models py from django db import models class Place model