Django 外键链接任意模型
我有一个模型,叫做评论(Comment)。在这个模型里,它需要保存一个引用,指向它所评论的对象。
这个对象可以是一个博客文章的回复,或者是对另一条评论的回复等等。
那么,我该如何存储这种关系呢?通常情况下,我会使用外键(ForeignKey)来存储这个信息。但外键要求它必须知道它所引用的模型类型。
在Django中,有没有什么内置的东西像外键那样,可以引用任何类型的模型?如果没有,怎么实现这样的关系才是最好的方法呢?
这是我想到的一些方法:
我可以用一个整数来存储它所回复的对象的ID,然后用一个字符字段(CharField)来存储类型。之后我可以通过类似 globals()[type_name].objects.get(id=id)
的方式来获取这个对象,但我觉得如果以后需要做一些复杂的操作,比如搜索,可能会遇到问题。
另外,我可以为每个可能的回复对象创建一个不同的评论类(当然是自动创建)。但这样又会带来限制。我就不能轻松地做像 Comment.objects.get(id=5)
这样的操作了。
或者,我可以让我的评论类为每个可能的回复对象都设置一个外键,只留一个不为空。这样似乎也不是一个好的解决方案。
有什么建议吗?