Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从Django中的一个字段引用不同的模型类型?_Python_Database_Django_Django Models - Fatal编程技术网

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字段的顶部添加了一点糖。