django:为可以成为作家或演员或两者的人创建模型

时间:2012-03-01 14:22:12

标签: python django django-models

我是python和Django的新手,试图创建一个包含有关人员的一般信息的数据库,所以我有这个:

  • 一个人的模型(包含一般信息)。
  • 一个人所属类别的模型(一个人可以同时处于多个类别)。

每个类别都包含自己的额外数据(处于“作家”类别的人可能会有一些我们想要存储在数据库中的书籍)

我考虑过模型子分类,但是如果一个人可以同时处于多个类别(特别是动态),这似乎不起作用

另一个想法是创建与Person模型具有OneToOne关系的配置文件,但我不确定它是否是最佳方式

解决这个问题的最佳/其他方法是什么?

3 个答案:

答案 0 :(得分:2)

听起来您希望每个类别都有ForeignKeyPerson

答案 1 :(得分:1)

ManyToManyField(Category)添加到Person类。

User模型中的Django权限以相同的方式解决(通过Group类)

编辑:

你是对的,我对无用的答案感到抱歉。

我的解决方案如下:

Class Person(Model):

   @property
   def extras(self):
      extra_data = {}
      for category in self.categories.all():
          category_model_class = CATEGORIES_DATA_MAP[category.name]
          extra_data[category.name] = category_model_class.objects.filter(user=self.pk)

      return extra_data

...其中CATEGORIES_DATA_MAP是带有类别/模型关系图的字典

答案 2 :(得分:0)

多个1to1 rel是要走的路。

定义一个ActorProfile模型,一个WriterProfile模型等,每个模型都有一个fk到User。然后在必要时使用一些orm魔法加载。

FK在配置文件模型中是基本的,否则每次需要新的配置文件时,您都需要在用户表上添加新列。

由于配置文件可能有些重叠,我建议使用组合(而不是继承),执行更多存储公共数据的配置文件类型,并保留特定数据的特定配置文件。

修改

使用基于文档的数据库(mongodb?)并忘记迁移,修复模式,人工连接......您只需要考虑以您真正需要的方式构建数据,但这些优点值得考虑。