你能解释一下这段代码吗?

时间:2010-01-20 18:51:16

标签: django

我正在研究cnprog(stackoverflow的django克隆)并且遇到了这段代码:

class Comment(models.Model):
    content_type   = models.ForeignKey(ContentType)
    object_id      = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    user           = models.ForeignKey(User, related_name='comments')
    comment        = models.CharField(max_length=300)
    added_at       = models.DateTimeField(default=datetime.datetime.now)

所以我的问题是“content_object有什么用?什么时候使用通用关系?”

感谢

1 个答案:

答案 0 :(得分:2)

我最近偶然发现了Django这个令人敬畏的功能,阅读the docs页面让我们都清楚了。

为了扩展一点,泛型关系是指您希望模型能够与多个其他模型相关联。在上面的示例中,因为它使用的是GenericKey,所以Comment可以属于多个模型(如问题或答案等)。

在我的特定使用示例中,我有一个AddressProfile模型,我希望User模型和Company模型都能够拥有AddressProfile。我最初在AddressProfile中只有两个ForeignKeys,其中null = True所以我可以指定它的关系,但GenericKey功能使我更清洁。