问题标签 [multi-table-inheritance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - how to conditionally save a form using django multi table inheritance
I have the following form:
class PlaceForm(forms.ModelForm):
I have the following models:
In my view I want to conditionally save either a Place or a Restaurant depending on the incoming url.
I have tried the following:
This creates a place from the form and then tries to create a restaurant, but fails with following: (1048, "Column 'customer_id' cannot be null")
This is telling me that a new row for a new place is trying to be inserted and then the restaurant row.
I see a few different options:
- Convert the Place to a restaurant and save the additional to the converted object.
- Conditionally change the model type of the form to either Place or Restaurant
How can I accomplish saving the different parent and child objects conditionally?
python - Django - 多表继承 - 与子类的反向关系
感谢您对以下问题的帮助。让我们使用 Django 文档中的模型来说明我的情况。
模型.py
查询集.py
正如您在上面看到的,我有一个基本模型“Place”和两个子模型“Restaurant”和“Pub”。基本模型“地点”具有指向“所有者”对象的链接。查询集(PlaceQuerySet、RestaurantQuerySet、PubQuerySet)与模型(Place、Restaurant、Pub)具有相同的继承层次结构。
我面临的挑战是以某种方式检索仅包含链接到某个所有者的 Pub 对象的 PubQuerySet....
我知道做我需要的一种方法是将 own_by(owner) 过滤器添加到 PubQuerySet 并调用以下内容:
但它存在性能问题,因为“.objects”不使用预取结果并且它总是命中数据库。
我的想法:
当我打电话
它返回
但是我怎么得到
???
我知道使用 django-model-utils(1) 中的 select_subclasses() 方法,我可以在 Queryset 中向下转换对象,所以如果我做这样的事情
我会得到带有 Pub 类实例的 PlaceQuerySet
但我仍然会收到 PlaceQuerySet 而不是 PubQuerySet ...
非常感谢您的帮助
亚诺
django - 如何在 django 中使用多表继承来复制对象
我正在尝试复制一个通过多表继承扩展另一个对象的对象。
父级是组,子级是位置
问题是更改了父对象,而不是创建新的父子对象。
这是我正在做的事情:
这不是在各自的表中创建新的位置和组行,而是将组表更新为具有名称 = 名称 + '- 子对象'。
我怎样才能让这个过程创建一个新的位置和组行而不是更新组行?
谢谢!
ruby-on-rails - 具有多个表继承的嵌套表单
如何在 Rails 中使用多表继承为对象构建嵌套表单?我正在尝试使用与另一组具有多表继承功能的模型具有 has_many 关系的模型创建嵌套表单来创建对象。我使用formtastic和cocoon作为嵌套表单,并使用act_as_relation gem 来实现多表继承。
我有以下型号:
对于此示例,该书与其他产品相比的唯一唯一属性是作者字段。实际上,我对 book 有许多独特的属性,这就是为什么我选择多表继承而不是更常见的单表继承的原因。
我正在尝试创建一个嵌套表单,允许您使用产品创建一个新商店。这是我的表格:
而 book_fields 部分:
我收到此错误:
在阅读了关于act_as_relation的 github 页面上的问题后,我想到了让 store 和 books 之间的关系更加明确:
现在,我得到一个静默错误。我可以使用表单创建新的商店,并且 cocoon 允许我添加新的书籍字段,但是当我提交时,商店被创建但不是子书。当我通过“/books/new”路线时,我可以毫无问题地创建一个跨越(产品和书籍表)的新书籍记录。
这个问题有解决方法吗?其余的代码可以在这里找到。
django - 在 django 中保存后对象的 id 为无
我正在遍历对象列表并保存。我需要在保存后立即生成新生成的 id 或指针 id,但它是无。
这是我的代码:
这会在例程运行后保存我的对象,但同样不会在这一行给我 id。
这是我的模型:
类别列表是这样创建的:
我究竟做错了什么?
python - 查询多个 Django 模型
我正在寻找一些关于如何对多个对象执行查询然后在相关对象的详细视图中一起使用它们的建议。这是我现在正在使用的内容:
我想要完成的是在类别详细信息视图中同时显示SomeObject和 SomeOtherObject 。这些模型中的每一个都将具有不同的属性,使它们彼此独特。这是通用外键有用的情况吗?
如果可能的话,我想远离在该产品的整个生命周期内难以维护的黑客攻击。再次感谢你们的帮助=)
python - 具有多表继承的 Django 1.5 select_related defer
编辑:
- 我在下面修正了一些错别字
- 我在一个小应用程序中添加了一个 zip 文件来演示这个问题。您可以在 syncdb 和迁移后下载并运行 python manage.py testselectrelateddefer。
- 我在下面添加了一些观察结果
我修复我有一个多表继承模型,如下所示:
当我不需要图像(在父模型中)时,我想查询这个模型并推迟图像字段。我的容器模型看起来有点像这样:
查询如下所示:
Django 抛出一个错误说:
如果我查询不在父模型中的字段,Django 不会抛出错误:
你知道如何解决这个问题吗?
观察:
- 正如我上面提到的,这只有在延迟字段在父模型中时才会发生;如果延迟字段在子模型中,则不会发生这种情况。
- 父母字段是否有任何额外字段都没有关系。
django - 我应该以任何方式避免 Django 中的多表(具体)继承吗?
许多经验丰富的开发人员建议不要使用Django 多表继承,因为它的性能很差:
Django gotcha:由Django 的核心贡献者Jacob Kaplan-Moss的具体继承。
几乎在所有情况下,从长远来看,抽象继承都是一种更好的方法。我见过不少网站在具体继承引入的负载下崩溃,所以我强烈建议 Django 用户对具体继承的任何使用都抱有很大的怀疑态度。
Daniel Greenfield ( @pydanny )的两勺Django
多表继承,有时称为“具体继承”,被作者和许多其他开发人员认为是一件坏事。我们强烈建议不要使用它。
不惜一切代价,每个人都应该避免多表继承,因为它会增加混乱和大量开销。代替多表继承,在模型之间使用显式 OneToOneFields 和 ForeignKeys,以便您可以控制何时遍历连接。
但是没有多表继承,我不能轻易
在另一个模型中引用基础模型(必须使用 GenericForeignKey 或反向依赖);
-
(随时添加更多)
那么在 Django 中这种继承有什么问题呢?为什么显式 OneToOneFields 更好?
JOIN 对性能有多大影响?是否有任何基准可以显示性能差异?
不允许select_related()
我们控制何时调用 JOIN?
我已将具体示例移至一个单独的问题,因为这个问题变得过于广泛,并添加了一系列使用多表继承的原因。
django - 删除 DO_NOTHING 时的 Django 多表继承“ptr”
有没有办法将 FK 选项(db_constraint、on_delete 等)应用于使用多表继承时自动创建的“_ptr”列?我想阻止 Django 模拟删除级联行为并让数据库本地执行该行为。
python - 从非抽象模型继承,没有多表继承
如果模型不是,有没有办法从现有模型继承以复制其所有字段(以 DRY 方式)而不调用多表继承abstract
?
需要明确的是,我有一个模型Post
,并且我希望有另一个模型在可用字段方面完全GhostPost
反映Post
,但我不希望它具有多表继承或与Post
. 问题是,Post
不是抽象模型,所以 Django 会发起多表继承。有没有解决的办法?
更新:我在这里寻找的不是模型的 Python 级副本,而是反映这些字段的实际独立数据库表。
解决方案:我遵循@Brandon 的建议并使用了抽象模型。