我是python和Django的新手,试图创建一个包含有关人员的一般信息的数据库,所以我有这个:
每个类别都包含自己的额外数据(处于“作家”类别的人可能会有一些我们想要存储在数据库中的书籍)
我考虑过模型子分类,但是如果一个人可以同时处于多个类别(特别是动态),这似乎不起作用
另一个想法是创建与Person模型具有OneToOne关系的配置文件,但我不确定它是否是最佳方式
解决这个问题的最佳/其他方法是什么?
答案 0 :(得分:2)
听起来您希望每个类别都有ForeignKey
到Person
。
答案 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?)并忘记迁移,修复模式,人工连接......您只需要考虑以您真正需要的方式构建数据,但这些优点值得考虑。