2011-05-09 83 views
3

所以我有一个模型,评论。在它里面,它必须保持对任何评论的引用。
它可以是一个博客帖子的回应,也可以是对其他评论的回应,等django ForeignKey任何类型的模型

那么,如何去保存这种关系?通常,我只是用ForeignKey存储信息。但是一个ForeignKey要求它知道它所引用的模型的类型。

有没有像Django内建的东西可以引用任何类型的模型?如果不是,实施这种关系的最佳方式是什么?

这里就是我想的:

我可以用一个整数来存储对象,它是响应,然后CharField存储类型的ID,然后我会通过获取对象做一些像globals()[type_name].objects.get(id=id)但我想我会有一些问题,如果我需要做任何复杂的事情,如搜索,如果我用这种方法。

或者,我可以为每个可以响应的对象创建一个不同的Comment类(当然是自动的)。但是,这又会造成局限性。我再也不能轻易做到像Comment.objects.get(id=5)

或者我可以让我的评论类有一个ForeignKey,它可以响应每个可能的事情,每个评论都留下一个空值。仍然看起来像是一个子解决方案。

对此提出建议?

回答

4

检出GenericForeignKey在内置的contenttypes框架。

+0

它说在页面上,我不能使用'objects.filter'与GenericForeignKey很容易。如果我有一个对象,并且我想要获取所有发布的响应,我该怎么做? – Ponkadoodle 2011-05-09 01:35:44

+0

向下滚动一下,查看'GenericRelation'类。 http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#django.contrib.contenttypes.generic.GenericRelation – sdolan 2011-05-09 01:55:59