2014-01-25 107 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字段的頂部添加了一些糖。 –

相關問題