django - 如何在 Django 模型中创建多个 ContentType 字段?
问题描述
我的 Django 模型使用函数模型,即公司中的通用函数(例如:CFO)。
在此模型中,我希望有一个字段指向持有该功能的默认人员 + 另一个指向备用人员的字段以防出现问题。该字段中的每一个都应该能够指向各种模型(用户模型+一个尚未在网站上登录的人的模型)
只要我只指向一个模型,这很容易:
class Function(models.Model):
function_name = models.CharField(max_length=255, blank=True) # e.g. CFO
main_user = models.ForeignKey('auth.User', on_delete=models.SET_NULL, null=True, blank=True)
backup_user = models.ForeignKey('auth.User', on_delete=models.SET_NULL, null=True, blank=True)
但是如果我希望这两个字段中的每一个都指向不同的模型,我需要使用 ContentType,例如:
class Function(models.Model):
functionname = models.CharField(max_length=255, blank=True) # e.g. CFO
#GenericForeignKey:
content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
如何在一个模型中有两个 GenericForeignKey?(对于 main_user 和 backup_user)?
非常感谢您的帮助,我对如何进行感到困惑
解决方案
GenericForeginKey
可以采用 2 个位置参数,第一个是 到 的字段名称ForeignKey
,ContentType
第二个是通用关系的对象 ID 的字段名称。鉴于这些信息,您可以构建通用关系,例如:
class Function(models.Model):
functionname = models.CharField(max_length=255, blank=True) # e.g. CFO
main_user_content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL)
main_user_object_id = models.PositiveIntegerField()
main_user = GenericForeignKey('main_user_content_type', 'main_user_object_id')
backup_user_content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL)
backup_user_object_id = models.PositiveIntegerField()
backup_user = GenericForeignKey('backup_user_content_type', 'backup_user_object_id')
推荐阅读
- c# - 如何在 C# 中启用合同?
- node.js - 'req.body.username' 和 'req.body.password' 未定义
- php - 在 laravel 的引导模式中加载视图
- c# - 部署 Hangfire .net Core 2.1 MVC 应用程序的清单定义问题
- java - 尝试将自定义功能添加到 Spring 数据存储库,但得到 UnsatisfiedDependencyException
- string - 比较最佳时间并不总是正常工作,也不知道为什么
- mysql - 选择列值为 NEVER x 的行
- php - 独白 slackhandler 和基本文件处理程序不能一起工作
- python - Python应用程序出错,如何读取日志文件
- azure - 如何监控 Azure VM 上的 Windows 服务?