我有一个代表Log Entry
的模型。只要对数据库进行了修改,就会创建此项。
我想包含一个外键字段,该字段引用Log Entry
中更改的模型对象。
这样的事情可能吗?
例如:
Log Entry 1
---> Modified Object Field = User Object
但现在不是修改用户,而是修改了博客......
Log Entry 2
---> Modified Object Field = Blog Object
答案 0 :(得分:4)
普通的ForeignKey只能“指向”另一个模型[...] contenttypes应用程序 提供了一种特殊的字段类型(GenericForeignKey) 这允许关系与任何模型。
答案 1 :(得分:1)
使用通用关系和GenericForeignKey
https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations
请记住,过滤掉通用外键会变得更加复杂(您需要先获取外键内容类型)
答案 2 :(得分:0)
您可以使用 Nigel Tufnel 说GenericForeignKey
,但我认为您正在寻找类似Django's admin log
的内容,如果您使用Django's
代码你可以看到它使用了ForeignKey
到ContentType
和一条消息:
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)