我正在研究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有什么用?什么时候使用通用关系?”
感谢
答案 0 :(得分:2)
我最近偶然发现了Django这个令人敬畏的功能,阅读the docs页面让我们都清楚了。
为了扩展一点,泛型关系是指您希望模型能够与多个其他模型相关联。在上面的示例中,因为它使用的是GenericKey,所以Comment可以属于多个模型(如问题或答案等)。
在我的特定使用示例中,我有一个AddressProfile模型,我希望User模型和Company模型都能够拥有AddressProfile。我最初在AddressProfile中只有两个ForeignKeys,其中null = True所以我可以指定它的关系,但GenericKey功能使我更清洁。