django ForeignKey 到任何类型的模型
Posted
技术标签:
【中文标题】django ForeignKey 到任何类型的模型【英文标题】:django ForeignKey to any type of model 【发布时间】:2011-08-21 08:26:15 【问题描述】:所以我有一个模型,评论。在其中,它必须保留对它所评论的任何内容的引用。 它可以是对博客文章的回复,或可以是对另一条评论的回复,等等。
那么我该如何存储这种关系呢?通常,我只会使用 ForeignKey 存储信息。但是 ForeignKey 要求它知道它所引用的模型的类型。
有没有像 ForeignKey 这样的 Django 内置的东西可以引用任何类型的模型?如果没有,实现这种关系的最佳方式是什么?
这是我的想法:
我可以使用一个整数来存储它正在响应的对象的 id,然后使用一个 CharField 来存储类型,然后我会通过执行类似 globals()[type_name].objects.get(id=id)
的操作来获取该对象,但我想我会有一些如果我使用这种方法需要做任何复杂的事情,比如搜索,那么问题来了。
或者,我可以为每个可以响应的对象创建一个不同的 Comment 类(当然是自动的)。但同样,这会导致限制。我不能再轻易地做Comment.objects.get(id=5)
之类的事情了
或者我可以让我的评论类对它可能响应的每个可能的事物都有一个 ForeignKey,除了 1 之外的所有评论都为空。似乎仍然是一个低于标准的解决方案。
建议?
【问题讨论】:
【参考方案1】:查看内置contenttypes
框架中的GenericForeignKey。
【讨论】:
它在页面上说我不能轻易地将objects.filter
与 GenericForeignKey 一起使用。如果我有一个对象,我想得到所有的 cmets 来响应它,我该怎么做?
向下滚动一点,查看GenericRelation
类。 docs.djangoproject.com/en/dev/ref/contrib/contenttypes/…【参考方案2】:
你想要 Django 的generic relations。
【讨论】:
以上是关于django ForeignKey 到任何类型的模型的主要内容,如果未能解决你的问题,请参考以下文章
任何人都可以仅使用 ForeignKey 在两个 django 模型之间建立多对多关系吗?
模型字段类型从 CharField 更改为 ForeignKey 时 Django 模板损坏