Python 字段定义与模型的关系';实体';,它不是未安装的,就是抽象的

Python 字段定义与模型的关系';实体';,它不是未安装的,就是抽象的,python,django,entity-framework,Python,Django,Entity Framework,我使用django模型继承来创建一个实体模型,这样我就可以在对话模型中引用两个外键,因为实体_1和实体_2可以是个人或企业。但是,我不断收到以下错误消息: api.Conversation.entity_1: (fields.E300) Field defines a relation with model 'Entity', which is either not installed, or is abstract. api.Conversation.entity_2: (fields.E30

我使用django模型继承来创建一个实体模型,这样我就可以在对话模型中引用两个外键,因为实体_1和实体_2可以是个人或企业。但是,我不断收到以下错误消息:

api.Conversation.entity_1: (fields.E300) Field defines a relation with model 'Entity', which is either not installed, or is abstract.
api.Conversation.entity_2: (fields.E300) Field defines a relation with model 'Entity', which is either not installed, or is abstract.
这是我目前的代码:

class Entity(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False)

    class Meta:
         abstract = True

 class Person(Entity):
    """
    Person model
    """

    avatar = models.ImageField(upload_to=get_upload_avatar_path, blank=True, null=True, default=None, max_length=255)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)


class Business(Entity):
    """
    Business model
`   """
    name = models.CharField(max_length=255, null=True, default=None)


class Conversation(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    entity_1 = models.ForeignKey(Entity)
    entity_2 = models.ForeignKey(Entity)

不能引用抽象类。它不创建数据库表。

您可以使用GenericForeignKey

例如:

from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Conversation(models.Model):
    entity_one = models.ForeignKey(ContentType,on_delete=models.CASCADE,related_name='entity_one')
    entity_two = models.ForeignKey(ContentType,on_delete=models.CASCADE,related_name='entity_two')
    entity1_id = models.PositiveIntegerField()
    entity2_id = models.PositiveIntegerField()
    entity_1_object = GenericForeignKey('entity_one', 'entity1_id')
    entity_2_object = GenericForeignKey('entity_two', 'entity2_id')

不能引用抽象类。它不创建数据库表。@trantu那我该怎么办?我想将实体_1和实体_2同时提供给参考人员和业务人员,因此我可以从对话模型中访问每个实体_1和实体_2。谢谢。我已经通读了这篇文章,但我仍然有点不清楚这将如何适应我的代码上下文?你能提供一个简单易懂的例子来配合我的工作吗?这就是我到目前为止所做的:,我一直收到错误消息
AttributeError:“module”对象没有属性“GenericForeignKey”
你必须从django.contrib.contenttypes.fields调用
,导入GenericForeignKey
。我贴了一个例子。请看那个。@trantu:您还需要添加
实体\u 1\u id
实体\u 2\u id
,并使用
GenericForeignKey
中的那些。您不能同时使用
object\u id
(甚至还没有声明)。它仍然不起作用。您需要将
实体\u 1\u id
实体\u 2\u id
定义为PositiveIntegerField。