所以我有一个模特,评论。在其中,它必须引用它所评论的任何内容 它可以是对博客文章的回复,或它可以是对其他评论等的回复。
那么我该如何存储这种关系呢?通常,我只会使用ForeignKey存储信息。但是ForeignKey要求它知道它引用的模型的类型。
Django内置的东西是否像ForeignKey一样可以引用任何类型的模型?如果没有,实施这种关系的最佳方式是什么?
以下是我的想法:
我可以使用一个整数来存储它所响应的对象的id,然后使用CharField来存储该类型然后我会通过像globals()[type_name].objects.get(id=id)
之类的东西来获取对象,但我想我会如果我需要做任何复杂的事情,比如搜索我是否使用过那种方法,那么就会遇到一些问题。
或者,我可以为它可以响应的每个对象创建一个不同的Comment类(当然是自动)。但同样,这会导致局限性。我再也不能轻易做Comment.objects.get(id=5)
或者我可以让我的评论类为每个可能响应的事物都有一个ForeignKey,为每个评论留下除了1之外的所有值。仍然看起来像是一个低于标准的解决方案。
建议?
答案 0 :(得分:4)
在内置contenttypes
框架中查看GenericForeignKey。
答案 1 :(得分:2)
你想要Django的generic relations。