首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模型设计

Django模型设计
EN

Stack Overflow用户
提问于 2010-01-21 07:26:09
回答 1查看 1K关注 0票数 0

我之前已经问过这个项目的问题,关于Django Admin,Inline,Generics等。再次感谢为这些问题提供答案的人。作为背景,这些问题在这里:

Django - Designing Model Relationships - Admin interface and Inline

Django Generic Relations with Django Admin

然而,我认为我可能应该再次检查我的模型,以确保它实际上是“正确的”。所以我想,这里的重点是数据库设计。

我们有一个Django应用程序,有几个对象--用户(有用户档案)、医院、科室、机构(比如教育机构)--所有这些对象都有多个地址(或者没有地址)。很可能其中的许多都会有多个地址。

也有可能多个对象可能有相同的地址,但这种情况很少见,我很高兴在发生这种情况时有重复的实例。

目前,模型为:

代码语言:javascript
复制
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字段?

其次,对于这种不同的对象都有地址的情况,有没有更好的替代方法来使用泛型关系?在另一篇文章中,有人提到使用抽象类-我想到了这一点,但似乎有相当多的重复,因为地址模型基本上对所有人都是相同的。

此外,我们将大量使用Django admin,因此它必须处理这个问题,最好也使用地址作为内联。(这就是我遇到的问题-因为我使用的是泛型关系,Django admin期望在content_type和object_id字段中有一些东西,当这些字段为空时会出错,而不是提供某种查找)。

干杯,维克多

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-21 07:53:49

我认为您所做的比使用某种子类化(基类可以是抽象的,也可以不是)更复杂。

代码语言:javascript
复制
class Addressable(models.Model):
  ...   # common attributes to all addressable objects

class Hospital(Addressable):
  name = models.CharField(max_length=20)
  ...

class UserProfile(models.Model):
  user = models.ForeignKey(User, unique=True)

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)
  ...
  owner = models.ForeignKey(Addressable)

如果您不想在数据库中为基类创建单独的表,则应该考虑将基类(可寻址)抽象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2105842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档