问题标签 [generic-foreign-key]

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 回答
491 浏览

python - 试图了解 Django 外键是如何工作的

所以我现在正在构建我的第一个 Django 项目,一个双人国际象棋网站。我快完成了,现在我正在编写测试。该项目有两个原始模型:玩家和游戏。Player 模型与 User 模型具有一对一的字段 Player.user 和 Game 的外键 Player.current_game,它指示玩家当前所在的游戏实例。 Game.draw_offered CharField 采用值 "" (默认值)、“w”或“b”,指示是否已提供平局以及提供平局的玩家的颜色。我有一个执行以下操作的测试用例:

除了最后一个,所有的断言都通过了,但是如果你取消倒数第二行的注释,它就会通过。

这是怎么回事?据我了解,当您引用外键属性 self.player2.current_game 时,Django 会执行数据库查找并返回带有最新字段的 Game 实例。由于 self.game 和 self.player2.current_game 对应数据库中相同的 Game 记录,而 self.game.refresh_from_db() 只是被调用,你会认为 self.game.draw_offered == self.player2.current_game.draw_offered将评估为 True——两个 Game 实例都引用相同的数据库记录并具有最新的字段。我必须调用 self.player2.current_game.refresh_from_db() 以使断言通过这一事实对我来说没有意义——根据我对 Django Foreign Keys 的理解,self.player2.current_game 应该自动更新与数据库。

0 投票
2 回答
2362 浏览

django - URL中带有Slug的模型的反向不起作用

我有一个引用模型 Part 的 parts.html 页面,我遇到问题的页面是 Part List Generic Model 视图。它的目的是列出页面上的所有部分并在其旁边显示类别。每个部分都有一个外键“类别”。我正在尝试创建从零件列表视图到类别详细信息页面的 Slug URL,但是当我转到 partlistview 页面时收到此错误。我可以使用 portal/category/category 访问 Category 页面,其中最后的第二个类别是数据库中的一个类别。

注意:下面的整个python文件都是缩放的,我只粘贴了相关信息,因为它会太多信息。

视图.py

模型.py

网址.py

零件.html

0 投票
1 回答
2417 浏览

python - Django:我可以使用 objects.filter() 作为通用外键吗?

符号.py

daily_price.py

我想做的是,

但是出现了错误:

StockSymbol已经有了GenericRelation。它出什么问题了?

还是我必须覆盖ojbect manager

0 投票
1 回答
317 浏览

django - 如何使用 Django ORM 过滤带有相关项目字段的 taggit 标签?

我有一个使用 django-taggit TaggableManager 的模型:

如何使用相关的食谱语言获取所有食谱标签?

0 投票
1 回答
476 浏览

django - Django 创建和更新视图:外键字段

假设我有以下两个类:

我正在使用 Django 的通用视图来创建和更新新床。与parcel外键一样,Django 使用数据库中的所有现有包裹自动创建一个选择输入。但是,我想告诉 Django 只放置具有特定 garden_id 的包裹。我查看了函数get_initial(self),但我不想为宗地指定初始值,只是缩小宗地的选择范围。

如果有人有想法,那将对我有很大帮助。

谢谢你。

0 投票
1 回答
268 浏览

django - Django 管理员:“另存为新”忽略 GenericForeignKey

我们有一个可以在 Django Admin 中编辑的模型 A。模型 B 通过 GenericForeignKey 链接到 A,并且链接的 B 实例与 A 一起显示在一个内联表单集中。

现在,当启用并使用“另存为新”时,A 实例的副本没有任何链接的 B 实例,这是我所期望的。使用常规外键,至少它是这样工作的。

它是 Django 中的错误还是预期的行为?有没有办法达到预期的结果?

0 投票
0 回答
123 浏览

django - Django GenericForeignKey 参考完整性

我是 django 编程的新手,并试图掌握 GenericForeignKeys。

我设法创建了一个存储在数据库中的通用外键,但该模型似乎没有强制执行参照完整性,

(即,我可以创建对不存在该对象 ID 的对象类型的 ID 的引用)

(例如:content_type:“post”,content_id:123,但post 123不存在)。

(在你说之前 - 是的 - 我知道 Django 有一些标记功能 - 这是一个非常简单的示例/测试,让我了解通用外键,并弄清楚它们是如何工作的,所以我可以在其他情况)

我的基本模型是:

在我的 admin.py 中,我有:

但是,当我运行管理页面时,它将允许我针对不存在的帖子 ID 创建一个标签。

有什么方法可以在这里强制执行参照完整性吗?我想我需要以某种方式使用 content_object GenericForeignKey,但我不知道该怎么做?

感谢您的帮助,

克里斯托弗。

0 投票
2 回答
1744 浏览

django - Django GenericForeignKey 更新

我正在尝试在 django 中将 ForeignKey 转换为 GenericForeignKey。我计划在三个迁移中执行此操作,mig1、mig2、mig3。

迁移 1 (mig1) 具有以下代码

迁移 2 (mig2) 有以下代码

我尝试同时使用对象的更新和直接分配

comment.content_object = content.post其次是comment.save()

它们似乎都不起作用。我如何更新通用外键字段。

一种方法是手动设置content_typeobject_id。有没有更好的方法来做到这一点?

编辑:评论模型

0 投票
0 回答
93 浏览

doctrine-orm - 当表使用通用外键模式时如何设置 Doctrine 实体关联?

我们继承了一个 3rd 方数据库模式,其中几个表使用数据库设计模式,其中表不直接定义外键,而是通过组合两列的方式来定义一些表:

  • 指定表名称的列:
    • 直接(ENUM type
    • 或通过另一个表(type_id引用表types,然后在 varchar 列中包含表名)
  • 从所述表中指定 PK 值的列(例如type_value

这会导致一行引用一个表而另一行可能引用一个完全不同的表的情况。

我们可以使用查询构建器并为每个场景手动定义 JOIN 和 WHERE 子句,但是为每个外部表拥有一个属性并使用 WHERE 子句仅过滤目标表结果会更实用,例如:

我设法找到的最接近我们需要的是使用 Criteria API 在 getter 方法中动态更新 WHERE 子句(如此处所示

但是,在这种情况下,我完全不知道如何设置 Doctrine 注释。Doctrine 是否支持这样的数据库模式,或者我们是否必须退回到通过查询构建器或 DQL 手动构建每个查询?

0 投票
0 回答
110 浏览

python - 如何设置指向 ManyToManyField 上多个类的 Django GenericForeignKey?

还是个新手,我得改编一个 Django (v1.10) 脚本。原始脚本使用一个主类“倡议”,它可以有任意数量的“支持者”。

我必须做出的调整包括沿着“倡议”(类似的行为,不同的领域)拥有另一个名为“策略”的主类。我在“倡议”和“政策”上坚持使用 ManyToManyField,它应该指向我试图使用 GenericRelation 来支持两个主要类的支持者。我收到以下错误消息:

我的models.py(删除了所有不相关的内容)之前:

在我的修改之后:

引发上述错误。我想我理解问题不是用户的外键(没有改变),而是我试图让支持者为倡议和政策工作。我只能找到through_fields寻找解决方案,但我认为我也在寻找错误的地方。

问题:
如何设置指向 ManyToManyField 上多个类的 GenericForeignKey?我也想知道我现在必须把related_name 参数放在哪里。