我以前曾问过关于Django Admin,Inline,Generics等这个项目的问题,再次感谢为这些人提供答案的人。有关背景,这些问题在这里:Django模型设计
Django - Designing Model Relationships - Admin interface and Inline
Django Generic Relations with Django Admin
不过,我想我也许应该重新检讨我的模型,以确保它实际上是“正确的”。所以这里的重点是数据库设计,我猜。
我们有一个包含多个对象的Django应用程序 - 用户(拥有用户配置文件),医院,部门,机构(即教育机构) - 所有人都有多个地址(或无地址)。很可能很多这些地址都有多个地址。
多个对象可能具有相同的地址也是可能的,但这种情况很少见,而且我很乐意为它们出现的那些情况进行重复。
目前,该机型是:
class Address(models.Model):
street_address = models.CharField(max_length=50)
suburb = models.CharField(max_length=20)
state = models.CharField(max_length=3, choices=AUSTRALIAN_STATES_CHOICES)
...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
...
class Hospital(models.Model):
name = models.CharField(max_length=20)
address = generic.GenericRelation(Address)
...
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
address = generic.GenericRelation(Address)
...
首先 - 我在做是正确的,与FK领域有地址的每个对象(ES)上?
其次,有没有更好的选择使用通用关系这种情况下,不同的对象都有地址?在另一篇文章中,有人提到使用抽象类 - 我想到了这一点,但似乎有相当多的重复,因为地址模型基本上都是相同的。我们将大量使用Django管理员,所以它必须使用它,最好也使用地址作为内联(这是我遇到问题的地方 - 因为我使用的是通用关系,Django管理员期待content_type和object_id字段中的内容,并且当这些内容为空时会出错,而不是进行某种查找)。
干杯, 维克多