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

python - 将模型类 Django 与另一个模型的实例相关联

针对@Todor 的评论进行了大量编辑。

[我使用 Django 1.7.6 和 Python 3.4.1。]

——</p>

因此,在我的 Django 项目中,我定义了一个Item具有各种特定子类模型的模型。我还定义了一个Category模型。我的模型的玩具版本如下所示:

模型.py

现在,????以上是我的问题。对于每个Category实例,我想关联一个Item子类列表。不是单个Item实例,而是Item 子类

示例:假设我创建了一个特定的Category实例<Category: terry>。现在我想告诉 DjangoGilliamItemJonesItem子类属于 "terry" Category

——</p>

我将如何使用它?我想写一个视图如下:

视图.py

即,我的视图(1)检索一个Category对象;(2) 构造一个字典,其中键是与之关联的模型的名称,Category值是包含这些模型的所有实例的查询集;(3) 将该字典提供给模板。

示例:我访问http://domain.com/category/terry/. 视图从数据库中检索Category对象。在第 7 行产生,所以字典最终看起来像name='terry'c.item_types[GilliamItem, JonesItem]{ 'gilliam items': GilliamItem.objects.all(), 'jones items': JonesItem.objects.all() }.

——</p>

最后,我希望站点管理员能够通过管理站点任意重新安排Category对象和Item类型之间的映射。(例如:有一天我可能会决定编辑“特里”以从Category中删除,并可能添加。)JonesItemitem_typesPratchettItem

0 投票
1 回答
672 浏览

django - Django BaseGenericInlineFormSet 表单不继承 FormSet 实例作为表单实例related_object

我正在使用 Django 1.8,并且我有一个如下所示的 Image 类:

还有一个具有 GenericRelation 的“父”类:

这是我的(简化)视图:

当我检查 ipdb 中的表单集时,我得到的是:

这会导致问题,因为当我到达时Image.clean()出现错误:

如果我取消注释我提到的我不需要的那两行,它会起作用并且我不会再收到错误。但是,表单与其模型和相关模型的自动链接难道不是使用BaseGenericInlineFormSet? 如果我必须手动破解 ImageForm 实例并将实例附加Product到其related_object上,那么我不妨使用一个简单的 ModelFormSet。我错过了什么吗?

更新

如果我注释掉Image.clean,即使没有手动附加相关对象,代码也可以工作。这意味着 BaseGenericInlineFormSet 毕竟确实处理了链接,但是它在调用clean子模型之后才这样做,考虑到 Model.clean “应该用于提供自定义模型验证”,这确实不好。我正在查看 Django 源代码,但还没有弄清楚它在哪里进行链接。欢迎提示。

更新 2

显然链接是在 InlineFormSetsave_new方法中完成的:

https://github.com/django/django/blob/master/django/contrib/contenttypes/forms.py#L46

作为一项实验,我已将该代码移至自定义_construct_form方法:

它解决了我的问题。这样我就不必进行手动链接。我还没有运行测试或编写补丁,但如果有人决定在未来这样做(也许我自己曾经),这可能是第一步。

不过,现在我通过手动链接来保留我的解决方案。不想使用破解版的 Django。

0 投票
0 回答
74 浏览

django - 泛型关系与迭代 Django 中的对象

我有三个模型,分别称为 Post、Category 和 Flag。我让用户在每个带有类别标签的帖子上制作一个标志。现在我想列出与某个类别的帖子相关的所有标志。我发现了两种使用 ListView 通用视图的方法:

第一种方法:
定义 Flag 和 Category 之间的通用关系,以便我可以调用如下内容:Flag.objects.filter(object__categor=self.category)

第二种方法:

我的问题是哪种方法更有效?我不熟悉泛型关系,但它似乎有点繁重。另一方面,查询所有 Flag 对象并遍历它们并不便宜。

模型.py

保存每个 Text 或 Image 实例后,我创建了一个 Post 模型。所以我可以分别标记帖子或文本标记和图像标记。

[还有关于如何定义泛型关系的任何提示,以防我应该使用它,将不胜感激]

0 投票
3 回答
2670 浏览

python - 如何将 GenericRelation 与 Django Rest 框架一起使用?

我想GenericRelation在 DRF中包含一个带有后向参考的模型

文档表明这应该很容易(就在上面: http: //www.django-rest-framework.org/api-guide/relations/#manytomanyfields-with-a-through-model) - 但我错过了一些东西!

请注意,使用 GenericRelation 字段表示的反向通用键可以使用常规关系字段类型进行序列化,因为关系中目标的类型始终是已知的。

有关更多信息,请参阅有关泛型关系的 Django 文档。

我的模型:

和我的序列化器:

被注释掉的两行是我试图告诉 DRF 如何在voteable里面序列化Question
第一行给了我

'GenericRelatedObjectManager' object has no attribute 'pk'

第二个

<django.contrib.contenttypes.fields.create_generic_related_manager.<locals>.GenericRelatedObjectManager object at 0x7f7f3756cf60> is not JSON serializable

所以,显然我误解了一些东西,知道什么吗?

0 投票
1 回答
13047 浏览

python - 如何在 Django 中遍历 GenericForeignKey?

我正在使用 Django v1.9.4 和 PostgreSQL 9.2.14。使用以下型号:

创建一些实例来演示我的问题:

我无法在 django 中遍历 GFK,尝试过滤会引发异常,并提示添加GenericRelation. 但是通过相关查询名称使用通用关系bars并不能可靠地工作。例如:

我究竟做错了什么?


给未来读者的注意事项: 模板在 Django 1.9related_query_nameGenericRelation无法正常工作。

在合并 #25354的修复后,在Django 1.10 中添加了related_query_name 现在支持使用 '%(app_label)s' 和 '%(class)s' 字符串的应用程序标签和类插值。

如果您使用的是 Django 1.10,则可以继续将其GenericRelation放在抽象基类和模板上,related_query_name='%(app_label)s_%(class)s'以确保子类之间的唯一性。

0 投票
1 回答
107 浏览

django - 当类多次涉及相同的通用关系时,如何序列化(使用 Django REST API)?

我有一个类对不同信息的同一个泛型类有多个引用:

当我需要使用 Django Admin 使用此类时,我有两个内联,每个内联都有一个查询集,为该关系选择正确的文本。这工作正常。

我尝试通过为每个关系使用单独的序列化程序和视图集来做类似的事情,但是当我检索一个度假村时,它仍然显示每个关系的所有文本。

所以基本上我的问题是,如何为每组文本使用不同的查询集?或者这有可能吗?

正确实施(感谢@lucasnadalutti)

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 投票
2 回答
1512 浏览

python - Django GenericRelated 字段条件查询引发“GenericRelation”对象没有属性“字段”

我有一个事件对象,除此之外还有其他对象Notes与 具有通用关系Event,并且没有活动字段。现在我希望能够编写一个查询,它排除所有Events活动字段Notes为 False 的地方。所以我尝试执行以下操作。

这不起作用,因为它单独运行查询,并且当它尝试为没有 content_object 或不是 type 的项目执行时Notes,它失败并给出以下错误:


0 投票
1 回答
42 浏览

django - 泛型关系模型声明

只是一个快速的菜鸟问题。每次在模型中使用 GenericRelation 时,是否需要有 content_type、object_id 和 content_object?我得到了泛型关系背后的概念,但我对如何实现它感到困惑。

下面是设置。

地址- 通用内容类型;用于不同的模型。

公司- 一个使用地址通用内容类型的简单模型。

Person - 一个使用地址通用内容类型的简单模型。

在所有模型中都必须具有这三个属性吗?提前致谢!

0 投票
1 回答
92 浏览

python - 如何使用 django Generic Relation 将帖子标记为喜欢

我想在我的应用程序中使用 GenericRelation 来实现“喜欢”功能。

我已经有这些模型:

我的views.py文件我有这样的行:

我的问题是,我如何才能获得该用户已经喜欢这篇文章的信息?