2

我正在尝试找出保存使用 django orm 的模型的最佳方法。我有一个模型/表格,User. 此外,我有一个名为 的模型/表ContactInfo,我们在其中存储了 User 表的外键。

我了解常见的 django orm 做法是将 ContactInfo 模型的外键放入 User 模型中,但此时,我们不想在已经单一的用户表中添加任何内容,因此我们将外键放入ContactInfo 模型。

我知道我可以将 User 模型存储在 ContactInfo 模型中,在 ContactInfo 上调用 save,它应该保存 User 模型,但是如果我与用户及其联系信息存在一对多关系怎么办?我宁愿在联系信息模型/对象的(1-many)实例中没有用户表的多个实例。

如果我能澄清任何事情,请告诉我。目前,我最好的想法是将 ContactInfo 列表的实例存储为user.contact_info,并覆盖保存方法以供用户user.save()检查contact_info,如果存在,则将其插入user.id每个模型并保存。不幸的是,我只是觉得这有点乱,但是对于 django 和 python 来说是新手,我不确定我的选择是什么。

任何帮助将不胜感激,谢谢!

4

2 回答 2

1

我不确定我是否正确理解了您的问题。Django 为 1-N 关系提供了很好的支持。如果ContactInfo有一个外键User,默认情况下,它是一个 1-N 映射。

ContactInfo ---------> 用户
             氮1

User所以,你的数据库中只有一条记录,看起来像这样

表用户表 ContactInfo
---------------------------------------------
id 用户名 id 用户名
 1 人 1 1
                               2 1
                               3 1

而且您不需要覆盖save方法。当您需要添加联系人时,

contact = ContactInfo(user=target_user)
# other stuff
contact.save()
#or 
target_user.contactinfo_set.create(...)#contactinfo_set is the related name of target_user
#Django maintains the foreign key things.

如果您使用上述方法插入新ContactInfo记录,则无需迭代contact_info列表即可将 user.id 插入数据库。

于 2012-08-07T05:50:28.363 回答
0

我不确定您是指自定义User模型还是 Django 附带的标准模型。如果是后者,那么 Django 提供了一种存储与每个用户相关联的附加信息的标准方法,称为用户配置文件。有关详细信息,请参阅文档中的此部分

于 2012-08-07T06:29:08.470 回答