Python 如何从Django中的一个字段引用不同的模型类型?
我有一个表示日志项的模型。只要对数据库进行了修改,就会创建该数据库 我想包括一个外键字段,它引用在日志条目中更改的模型对象 这可能吗 例如:Python 如何从Django中的一个字段引用不同的模型类型?,python,database,django,django-models,Python,Database,Django,Django Models,我有一个表示日志项的模型。只要对数据库进行了修改,就会创建该数据库 我想包括一个外键字段,它引用在日志条目中更改的模型对象 这可能吗 例如: Log Entry 1 ---> Modified Object Field = User Object 但是现在用户没有被修改,博客被修改了 Log Entry 2 ---> Modified Object Field = Blog Object 这可以使用泛型关系和GenericForeignKey实现 请记住,在通用外键之间进行过
Log Entry 1
---> Modified Object Field = User Object
但是现在用户没有被修改,博客被修改了
Log Entry 2
---> Modified Object Field = Blog Object
这可以使用泛型关系和GenericForeignKey实现
请记住,在通用外键之间进行过滤会变得更加复杂,您需要首先获取foreignkey内容类型这可以使用通用关系和GenericForeignKey 请记住,在通用外键之间进行过滤会变得更加复杂。您需要首先获取外键内容类型。请查看: 普通的ForeignKey只能“指向”contenttypes应用程序的另一个模型[…] 提供一个特殊的字段类型GenericForeignKey,可用于 这将允许与任何模型建立关系 看看: 普通的ForeignKey只能“指向”contenttypes应用程序的另一个模型[…] 提供一个特殊的字段类型GenericForeignKey,可用于 这将允许与任何模型建立关系 正如Nigel Tufnel所说,您可以使用GenericForeignKey,但我认为您正在寻找类似Django的管理日志的东西,如果您查看Django的代码,您可以看到它使用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)
正如Nigel Tufnel所说,您可以使用GenericForeignKey,但我认为您正在寻找类似Django的管理日志的东西,如果您查看Django的代码,您可以看到它使用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)
你最好的猜测是看看django管理员是如何做同样的事情的。当你登录到django admin时,你已经注意到了你的日志,对吧?你最好的猜测是查看django admin是如何做同样的事情的。当你登录到django admin时,你已经注意到了你的日志,对吗?但这就是一般的外文。实际的类只是在content-type/object-id字段的顶部添加了一点糖分,但这就是泛型外文。实际的类只是在content-type/object-id字段的顶部添加了一点糖。