微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Django 模型中创建多个 ContentType 字段?

如何解决如何在 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',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 个位置参数,第一个是 ForeignKeyContentType 的字段名称,第二个是泛型关系的对象 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')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?