问题标签 [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 投票
3 回答
880 浏览

django - 帮助理解 Django 中的通用关系(以及 Admin 中的用法)

我正在为我公司的网站构建一个 CMS(我已经查看了现有的 Django 解决方案,并且想要一些更苗条/更简单的东西,并且可以专门处理我们的情况。另外,我想更好地学习这些东西)。我很难理解泛型关系。

我有一个Page模型、一个SoftwareModule模型和一些其他模型来定义我们网站上的内容,每个模型都有自己的get_absolute_url()定义。我希望我的用户能够为任何Page实例分配任何类型的对象列表,包括其他页面实例。该列表将成为该Page实例的子菜单。

我尝试了以下方法:

这让我有了一个与 API 的通用关系来做page_instance.links.all()。我们正在路上。我不确定如何完成,是在页面实例的更改表单上,如何创建该页面与数据库中任何其他现存对象之间的关系。我想要的最终结果:在模板中呈现以下内容:

显然,有些事情我没有意识到或误解,但我觉得我正在踏入那个我不知道我不知道什么的领域。我错过了什么?

0 投票
2 回答
443 浏览

django - 为什么我不能在 Django 中用通用关系保存我的模型两次?

我得到了一个模型 TrackedItem,它具有链接到它应该跟踪的任何模型的通用关系。

如果我这样做:

我得到:

实际上,第一次保存创建了一个带有“1”的条目作为PK。但是第二次保存不应该插入,它应该更新。

我该如何更新无法保存两次的模型?

使用普通型号,我可以节省尽可能多的钱。

编辑:它可能与通用关系完全无关。

我有一个覆盖的保存,我在其中调用 super ,这样:

如果我这样做,它会起作用:

0 投票
2 回答
182 浏览

python - Django模型属性引用任意模型实例

我正在 Django 中开发一个日志应用程序,以记录其他应用程序中的模型何时被创建、更改或删除。我真正需要记录的是执行此操作的用户、时间戳、操作类型以及更改的项目。用户、时间戳和操作类型都很简单,但我不确定除了存储 id 值和类名以便以后可以检索该项目之外,存储受影响项目的好方法是什么。我想存储类名会导致一些hacky解决方案,以便找到实际的类,所以我想知道是否有更好的方法。有人知道吗?

0 投票
1 回答
327 浏览

django - 关于使用 Django Orm 的泛型关系的这个错误的任何线索?

这是一个有趣的:-)

在 EAV 上工作时,我们在模型中在运行时注入一个通用关系处理程序。

model_cls是任何类,并且EavValue类具有指向它的通用关系。从EavValuesto a可以正常工作model_cls,但另一方面,我们需要注入一个访问器来简化事情:

同样,我们在运行时这样做是因为我们想让它与不可触及的 3rd 方库一起工作。

在使用Patientas 类进行单元测试时model_cls,我们收到以下错误:

现在,我们认为最简单的解决方法是更改contribute_to_class​​ 或related_namein的第二个参数GenericRelation,但事实并非如此!我们得到完全相同的错误,只是名称不同。

第二个奇怪的事情,使用 Sqlite 而不是 MySql 运行相同的单元测试:全部通过。

更重要的是,无论顺序或测试,我们总是在第二次测试时得到这个错误。由于这个过程发生在一个register方法中,并且我们在设置和拆除时调用registerunregister我猜我们的unregister方法是不完美的。

最后一个奇怪的事实:我们在运行 unittest 时遇到错误,但我们无法手动重现它。最糟糕的是,在我同事的计算机上,当我们使用相同版本的 Python、Django、Ubuntu 和 MySQL 时,它不会出现错误。

我们解决了很多困难的问题,但我们有点卡在这个问题上,所以任何线索都值得赞赏。

更新:

这个伟大游戏的新线索:

在 django.core.management.validation 中的这个片段中引发了错误,第 245 行(django 1.2.1):

对我们来说r.get_accessor_name() == rel_name是真实的,因为两者都是“耐心”。

更新 2:

当我们添加register一个模型的应用程序时。任何型号,问题不再出现。理论就这么多了unregister……

我们有两个对称的错误(关系的两边)。删除related_name抑制错误之一 0_o

0 投票
1 回答
152 浏览

django - 在 Django 中,如何创建对不同模型的引用 & 不知道它是什么模型?

我对 Django/Pinax 比较陌生,我面临着这种特殊情况。假设我有一个模型“车辆”。现在,“Vehicle”的每个实例都有一些与“vehicle”相关的属性,但它也引用了一个汽车类的实例,其中“汽车”可以是“汽车”、“船”等众多模型之一, “飞机”等

因此,当我创建这个“Vehicle”对象时,我想不知道它引用的是哪个类实例。

但是当我获得所有车辆实例时,我应该能够获得引用汽车的内容。

我怎样才能做到这一点?我已经四处寻找可能的解决方案,但我唯一想到的就是使用 django 的“ContentTypes”框架。但这需要对我想要引用的类进行更改,即。“汽车”、“船”、“飞机”,但在我的情况下这有点棘手,因为在某些情况下这些是外部应用程序。

对我有什么指示吗?

0 投票
1 回答
2882 浏览

django - 在 Django 中使用泛型关系进行注释

我正在使用django-hitcount来统计对我的数据库对象的命中。我想按对象计算点击次数,以确定在给定时间范围内哪个对象的点击次数最多。该应用程序在这里有两个感兴趣的模型:

“命中”记录每个命中的时间戳,而 HitCount 存储命中的总数。要在某个时间范围内按对象获取命中,我需要执行以下操作:

按创建日期过滤命中计数每个 content_object 的命中数(在上面过滤的时间范围内)按上面计算的计数排序返回 content_object 和计数

这可能非常昂贵,所以我计划每天计算/缓存一次。

作为第一步,我想计算每个 content_object 的点击次数,而不考虑时间范围。

我立即遇到了一个问题:

无法将关键字“hitcount__content_object”解析为字段。选项有:created、hitcount、id、ip、session、user、user_agent

经过一番挖掘,我发现注释和泛型关系不能很好地协同工作。如果我使用 object_pk 而不是 content_object,它可以正常工作,但是我没有对象的名称。

所以我的问题是:实现相同结果的替代方法是什么?如何按对象分组但还保留名称?

我确实有模型 (content_type) 和 id (object_pk),所以我总是可以单独提取它们,但这似乎不优雅。. .

0 投票
1 回答
1254 浏览

python - django 通用的一对一关系,具有级联删除

我正在尝试使用 django 的通用关系来模拟继承模型。到目前为止,这就是我想出的:

从您在此处看到的内容(希望如此,至少),SubClass1应该与 具有一对一的关系Base,这就是为什么我经历了创建该_base字段然后用base属性覆盖它的所有工作。拥有该通用关系将自动连接级联删除,这就是我想要的(并且我有一个post-delete信号将从另一个方向连接删除)。

可能有任意数量的子类Base,让我感到恶心的是必须复制和粘贴_base及其覆盖的属性。我还有一个与此相关的自定义对象管理器,以及可能在Base.

有没有一种很好的方法来封装这个常见的功能,所以我不必为每个子类复制和粘贴它?

0 投票
1 回答
1029 浏览

django - Django:使用通用关系中的值获取 ValueQuerySet

我有两个由通用关系链接的模型:

现在我想获取所有'code为'xxx'的'bar.value',语法如下:

但这不起作用(Django 告诉我 'bars__value' 不是有效字段)。

有什么提示吗?

编辑:在 SQL 中我会做这样的事情:

或将 content_type_id 与另一个查询一起使用

0 投票
1 回答
844 浏览

python - Django 间接泛型关系

我一直在尝试为我的应用程序实现一个标记系统,其中每种内容类型只允许使用某些标记。

我尝试在 Tag 模型上设置内容类型,并在 TagAttribution 模型上使用此值,并且得到了……有趣的结果。

代码:

外壳测试:

输出:

我不明白这种行为;如果我使用公司 id 1,为什么它会得到 id 13?

0 投票
1 回答
460 浏览

django - Django:在基于抽象类创建模型后向用户模型添加属性

我有一个普通模型和一个抽象模型,如下所示:

然后Taggable像这样使用抽象模型类:

所以如果我们有一个照片对象:

我可以使用 photo.tagged_users.all() 标记照片中的所有用户

我想添加与用户对象的反比关系,这样如果我有一个用户:

我可以调用类似的东西user.tagged_photo_set.all()并让它返回所有照片对象。

我怀疑由于 TaggedSubject 在通用关系上连接到 Taggable 模型,因此不可能将其用作具有字段的through模型。ManyToMany

假设这是真的,这是我认为我需要(以某种方式)添加到 User 模型的功能:

我想知道是否可以对其进行设置,以便每次基于 Taggable 创建一个新模型类时,它都会创建上面函数的一个版本并将其添加(理想情况下作为一个行为类似于属性的函数!)到用户.

或者,如果有可能以某种方式在通用关系上进行 ManyToMany 字段连接(我非常怀疑),那也可以。

最后,如果我没有看到第三个更酷的选择,我当然愿意接受。