Python 字段定义与模型的关系';实体';,它不是未安装的,就是抽象的
我使用django模型继承来创建一个实体模型,这样我就可以在对话模型中引用两个外键,因为实体_1和实体_2可以是个人或企业。但是,我不断收到以下错误消息: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
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。