2014-01-25 73 views
1

我有一个模型代表Log Entry。这是随时对数据库进行修改而创建的。如何在Django的一个字段中引用不同的模型类型?

我想包含一个外键字段,它指的是Log Entry中已更改的模型对象。

这样的事情可能吗?

例如:

Log Entry 1 

---> Modified Object Field = User Object 

但现在不是用户被修改,博客已被修改......

Log Entry 2 

---> Modified Object Field = Blog Object 
+0

你最好的猜测是查找如何Django管理员做同样的事情。你注意到你的日志,当你登录到Django的管理员,对不对? –

回答

2

GenericForeignKey看看:

正常F​​oreignKey的只能用“点”另一个模型[.. 。] contenttypes应用程序 提供了一个特殊的字段类型(GenericForeignKey),它可以在 之上工作,并允许关系与任何模型一起使用。

0

奈杰尔·塔弗内耳说,一个GenericForeignKey,但我认为你正在寻找的东西像Django's admin log,如果你把周围的Django's代码,你可以看到它使用您可以使用ForeignKeyContentType和消息:

class LogEntry(models.Model): 
    action_time = models.DateTimeField(_('action time'), auto_now=True) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    content_type = models.ForeignKey(ContentType, blank=True, null=True) 
    object_id = models.TextField(_('object id'), blank=True, null=True) 
    object_repr = models.CharField(_('object repr'), max_length=200) 
    action_flag = models.PositiveSmallIntegerField(_('action flag')) 
    change_message = models.TextField(_('change message'), blank=True) 
+0

但这是一个普通的外国人。实际的类只是在内容类型/对象ID字段的顶部添加了一些糖。 –

相关问题