使用外键保存django orm模型

时间:2012-08-07 04:56:12

标签: python django orm django-models

我正在试图找出保存我使用django orm的模型的最佳方法。我有一个模型/表格User。另外,我有一个名为ContactInfo的模型/表,我们将外键存储到User表。

据我所知,常见的django orm实践是将ContactInfo模型的外键放入User模型,但此时,我们不想在已经单片的用户表中添加任何东西,所以我们把外来的密钥进入ContactInfo模型。

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

如果我能搞清楚,请告诉我。目前,我最好的想法是将ContactInfo列表的实例存储为user.contact_info,并覆盖用户user.save()的save方法以检查contact_info,如果存在则插入{ {1}}进入每个模型并保存。不幸的是我觉得这有点乱,但是对于django和python而言,我不知道我的选择是什么。

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

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

ContactInfo   --------->   User
             N          1

因此,您的数据库中只有一条User条记录,如下所示

Table    User               Table ContactInfo
---------------------------------------------
id     user_name              id     user_id
 1       someone               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插入数据库。

答案 1 :(得分:0)

我不确定您是否意味着自定义User模型或Django附带的标准模型。如果是后者,则Django提供了一种标准方式来存储与每个用户相关联的称为用户配置文件的附加信息。有关详细信息,请参阅this section in the documentation

相关问题