问题描述
我的 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',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')