Django与Django管理员的泛型关系
我有一个Django项目,它有一个“地址”模型。这在几个地方都有使用——通过“用户配置文件”模型、“医院”模型、“机构”模型等 我使用Django的泛型关系来允许这些对象中的每一个创建一个外键来寻址 然而,这似乎在Django管理员中引起了一些奇怪的现象(或者我没有正确理解它的用途)。在Django管理员中,如果我尝试创建一个地址,我会看到“内容类型”和“对象id”字段。如果未填充,则模型将不会验证/保存。不知道该放什么进去 问题是,我希望能够创建独立的地址对象。然后,当我创建用户配置文件或医院时,我可以将它们链接到地址对象,包括多个链接到同一地址对象的可能性 我应该如何使用Django admin和泛型关系 此外,我还打算使用django reversion进行模型的版本控制,不确定这是否会导致泛型关系和管理问题 干杯, 胜利者 编辑:我应该补充一下,这里是我之前发布的地址和内联的一个问题: 根据这里给出的答案,这就是为什么地址模型是带有外键的。由于普通FK场只能指向一种类型的对象,所以我们使用泛型关系 每个用户/部门/医院等可能(并且在大多数情况下)有多个地址 同一个地址可以被多个实体使用,但这种情况比较少见,我猜在这里复制也不错,对吧 因此,从用户/部门/医院到地址都是一对多Django与Django管理员的泛型关系,django,django-models,generic-relationship,Django,Django Models,Generic Relationship,我有一个Django项目,它有一个“地址”模型。这在几个地方都有使用——通过“用户配置文件”模型、“医院”模型、“机构”模型等 我使用Django的泛型关系来允许这些对象中的每一个创建一个外键来寻址 然而,这似乎在Django管理员中引起了一些奇怪的现象(或者我没有正确理解它的用途)。在Django管理员中,如果我尝试创建一个地址,我会看到“内容类型”和“对象id”字段。如果未填充,则模型将不会验证/保存。不知道该放什么进去 问题是,我希望能够创建独立的地址对象。然后,当我创建用户配置文件或医院
在最初的问题中,他们还建议使用抽象类,并为每个需要地址的实体使用不同的地址模型。我仍然不确定这是不是更好的方法,或者是否有一种方法可以使泛型关系与我在这里尝试做的事情相配合。在django中使用泛型关系正是这样。一个
ForeignKey
到ContentType(content\u type)和一个IntegerField
表示实例id(object\u id)。如果您不知道ForeignKey
指向的是哪种类型的内容,这些功能非常有用。因为您知道您的目标是地址
模型,所以希望使用常规外键(地址)
而不是通用关系
回应您的评论
实际上,使用ForeignKey
要容易得多,因为您不需要遍历ContentType
class Address(models.Model):
street=models.CharField(max_length=100)
city=models.CharField(max_length=100)
class Hospital(models.Model):
name=models.CharField(max_length=100)
created=models.DateTimeField()
address=models.ForeignKey(Address, related_name="hospitals")
class Institution(models.Model):
name=models.CharField(max_length=100)
address=models.ForeignKey(Address, related_name="institutions")
>>> instance=Institution.objects.get(id=1)
>>> instance.address.city
>>> address=Address.objects.get(id=1)
>>> address.institutions.all()
>>> address.hospitals.all()
你的模特会分享地址吗?i、 e.医院
和机构
以及可能的用户档案
是否都指向同一地址实例?还是更可能每个人都有自己的地址?我试图理解您为什么创建了一个单独的类地址
。如果要避免在每个类中重新键入相同的字段,可以使用抽象模型类并将其子类化。或者您可能需要一个OneToOneField
,它是两个实例之间的双向指针