问题标签 [django-generic-relations]

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.

0 投票
1 回答
798 浏览

python - 在 Django 中,如何从单个表单字段填充通用关系?

在我们的应用程序中,我们的模型A具有通用关系的字段,因为它可能与两个模型(BC)之一的实例相关。

在填充非通用 ForeignKey 字段时,我们可以使用 ModelChoiceField。我们的问题是我们找不到 MultipleModelsChoiceField,它的选择将从B和上的查询集中填充C

如何通过尽可能多地重用现有的 Django 代码来解决这个问题?

0 投票
2 回答
1337 浏览

python - How to use inverse of a GenericRelation

I must be really misunderstanding something with the GenericRelation field from Django's content types framework.

To create a minimal self contained example, I will use the polls example app from the tutorial. Add a generic foreign key field into the Choice model, and make a new Thing model:

With a clean db, synced up tables, and create a few instances:

So far so good - the relation works in both directions from an instance. But from a queryset, the reverse relation is very weird:

Why the inverse relation gives me again the id from the thing? I expected instead the primary key of the choice, equivalent to the following result:

Those ORM queries generate SQL like this:

The Django docs are generally excellent, but I can't understand why the second query or find any documentation of that behaviour - it seems to return data from the wrong table completely?

0 投票
1 回答
1439 浏览

django - 使用 Django Rest Framework 序列化通用关系,并提供写入支持

我有以下模型:

我正在尝试以一种可以通过 API 端点分配内容对象的方式序列化此模型

到目前为止,我已经这样做了:

但是,这是只读的。如果我删除 read_only 参数,我必须为该字段指定查询集。但是,对于这种通用关系,我有许多不同的模型类型。如果我在序列化程序和模型的其他地方指定所有可能的模型类型,我似乎在复制代码。

我还可以通过 object_id 和 content_type 字段设置内容对象,但是当我这样做时会出现错误。

例如:

返回 400 响应 "detail": "JSON parse error - Expected object or value"

如何通过 DRF api 使这个 content_object 可写?

0 投票
2 回答
2994 浏览

django - Django中显示错误的通用外键必须是内容类型的实例

我有一个以下抽象类

现在有2个类从上面继承:-

现在我想将它们与功能联系起来,所以我创建了以下类:-

但是当我尝试在 shell 命令中创建实例时,在创建映射实例时出现错误

“Mapping.content”必须是“ContentType”实例。

我该如何处理?

0 投票
1 回答
723 浏览

python - 如何在 Django 中使用通用外键添加 unique_together

在 Django 中使用 GenericForeign Relations 时,我不确定我做错了还是在处理唯一约束时出现了一些问题。

当我尝试保存对象时(例如在 Admin 中),我收到唯一约束错误(引发 500)表单数据库,但在 Admin (UI) 上没有 ValidationError。

下面是我的代码片段,

我有一个如下的通用关系模型,

而我使用它的另一个模型是,

引发异常:

duplicate key value violates unique constraint "mymodel_targeting_targeting_type_0dff10ee_uniq" DETAIL: Key (targeting_type, content_type_id, object_id)=(geo, 18, 188) already exists.

我实施它的方式有问题吗?或者某些东西不应该像这样使用?

任何形式的帮助都非常感谢。谢谢

0 投票
2 回答
2006 浏览

django - 具有通用外键的 DRF 序列化程序 - 在保存之前检查给定的对象 ID 是否存在

我试图找到一种方法来检查给定的对象 ID 是否IntegerField存在(用于序列化程序中的通用关系),就像PrimaryKeyRelatedField.

到目前为止,我采用了这种方法:
models.py:

序列化程序.py:

但这不是一种可靠的方法,因为它实际上不会引发字段错误 - 它只是模仿它,因此在 API 浏览器中该字段没有突出显示。我想知道是否有更好的解决方案?提前致谢!

PS这是提交表单后的样子:

0 投票
1 回答
307 浏览

django - Django 1.10:删除具有 GenericRelation 的模型时出错

在我的项目中,我通过第三个模型 ABMapping 使用 GenericRelation 将从 A 类继承的模型映射到 B 类型的模型。

模型.py:

在 Django 管理员中,当我尝试删除 A 的子对象时,我收到错误消息“无法将关键字 u'object_id' 解析为字段。选择是:x、y、id、abmapping。” 似乎它试图从 ABMapping 中获取一个字段,但在 B 中找到它。

如您所见,我将模型精简到最低限度,但问题仍然存在。

即使我删除了 A 的子类的对象的所有 ABMappings,也会出现同样的问题。

StackOverflow 上所有看似相关的问题都与人们抱怨没有发生级联删除有关……但我什至无法进行顶级删除。

这些模型的一切都运行良好一段时间......除了这个从管理员删除的问题,它从一开始就没有工作。我在这里想念什么?

谢谢!

0 投票
0 回答
451 浏览

django - Django GenericRelation 与 JSONField

在我的应用程序中,可以将许多不同类型的Records 映射到Person. 在我最初的实现中,我让每条记录都继承自一个抽象基类,并使用GenericRelations 来管理整个事情。代码有点复杂,但它可以工作:

模型.py

等等。(正如我试图指出的那样,每种类型Record都与其他类型完全不同,每种模型的字段都非常不同。)

当我围绕这些模型构建应用程序时,我开始怀疑这种方法是否可以扩展,因为我最终将拥有许多RecordX-type 类。我开始考虑如何将所有Records 放在一个表中,并用一列指示Record每个表是哪一种,最终发现了 new-ish JSONField。乍一看,这似乎正是我想要简化整个事情的方法。

所有这一切似乎都很好,直到我意识到通过将模型字段转换为 JSON 属性而失去了多少功能,鉴于 JSON 中的数据是用户输入的,这一功能很重要。

  • 我无法轻松验证 JSON 中的数据条目。显然我可以这样data = JSONField(validators=[something???]),但据我所知,这个实现并不适合validator依赖于值的情况Record.type
  • 即使我能弄清楚这一点,我也会失去各个字段的干净管理界面。是的,我想我可以使用自定义保存功能制作自定义表单,但这似乎相当麻烦。

所以——我正在寻找这种情况下最好的架构的洞察力,在不使代码库不必要地复杂化的情况下平衡性能。或者,对于这种情况我不知道还有其他方法吗?

(我知道这不是理想的 StackOverflow 问题,但我希望根据性能和可维护性评估这些(或其他)代码示例使这个问题可以回答,而不仅仅是可以讨论?)

谢谢!

0 投票
1 回答
184 浏览

django - 通过 GenericRelation 上的 ForeignKey 进行 Django 查询缓存

使用 aGenericRelation将 s 映射RecordPersons,我有以下代码,它可以正常工作,但是我正在尝试解决一个性能问题:

模型.py

总之,我有:

我的应用程序中的显示逻辑遵循这些关系来显示Person映射到每个的所有 s RecordX

视图.py

问题出在模板中:

模板.html

如前所述,每次我请求与Persons 相关的 s 时RecordX,它都会生成一个新查询。我似乎无法弄清楚最初如何预取这些以避免冗余查询。

如果我尝试selected_related,我会得到一个错误,selected_related这里没有字段是可能的(错误消息:)Invalid field name(s) given in select_related: 'xxx'. Choices are: (none)。毫不奇怪,我现在明白了——这个模型上没有任何 FK。

如果我尝试prefetch_related('people'),不会引发错误,但我仍然会在模板中的每个循环上得到与以前相同的重复查询。同样对于prefetch_related('people__person'). 如果我尝试prefetch_related('personrecordmapping'),我会得到一个错误。

按照这个答案,我考虑过尝试模拟一个类似的select_related东西:

但我不太了解_content_object_cache如何使这个答案适应我的情况(即使是正确的方法)。

那么 -当页面将显示n 个对象时,如何将所有Persons预取到RecordXs 以避免n 个查询? RecordX

谢谢你的帮助!

0 投票
1 回答
369 浏览

python - django中的通用关系,带有聚合的查询集

我在模型中使用 django 1.6 和泛型关系。我对aggregate模型中的功能有疑问:

以下是我的部分观点:

我在这个地方得到一个错误:

错误:

但是数据库中有一个表(我使用 sqlite),其中包含字段:id、content_type_id、object_id、position、is_sale_active、is_cyclic_event_active、cycle_link