Django 具有不同型号键的外键列

Django 具有不同型号键的外键列,django,django-models,Django,Django Models,假设我有4个模型,A,B,C,X A包含A1、A2、…An(类似于B和C) 我在X中有一个对象,比如说X1,它与类别A,B或C中的一个对象有关 我在X的模型中有一列作为类别 如何将其与A、B和C的不同型号相关联 如果这不能用一列来完成,那么实现这一点的最佳方法是什么 很抱歉问了一个基本问题 提前感谢:)您有两种选择 使用model(我们称之为Base),它将是A、B和C的父模型: class Base(models.Model): # you can put any fields her

假设我有4个模型,A,B,C,X

A包含A1、A2、…An(类似于B和C)

我在X中有一个对象,比如说X1,它与类别A,B或C中的一个对象有关

我在X的模型中有一列作为类别

如何将其与A、B和C的不同型号相关联

如果这不能用一列来完成,那么实现这一点的最佳方法是什么

很抱歉问了一个基本问题


提前感谢:)

您有两种选择

  • 使用model(我们称之为Base),它将是A、B和C的父模型:

    class Base(models.Model):
        # you can put any fields here that are common to A, B and C, but not having any fields here is fine
        pass
    
    class A(Base):
        # fields for A, models B and C will be similar so I'm skipping them
        pass
    
    现在您可以在X模型中创建外键,并在下一步提取专用模型。为了简化特殊模型的提取,可以使用

  • 使用:

    这种方法更通用,但也没有给您太多的控制,在模型X中实际引用的内容。它也不能很好地发挥自定义主键。在数据库端也没有使外键保持有效的约束


  • 我遇到了通用关系,但发现很难实现。我会有更深的理解,然后再试一次,谢谢!
    class X(models.Model):
        content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
        object_id = models.PositiveIntegerField()
        content_object = GenericForeignKey('content_type', 'object_id')