Django:多对多关系编辑

时间:2013-10-31 15:11:06

标签: django forms postgresql

我有一个名为Connector的模型,它具有配置文件的外键和与ExternalAttribute模型的多对多关系。 ExternalAttribute模型具有静态的属性对象列表。我希望用户能够从他们的配置文件中添加和删除ExternalAttribute模型的属性。

在表单中,我将ExternalAttribute中的所有对象下拉到ModelMultipleChoiceField中,该工作正常,但我无法保存所选属性并将对象添加到Connector模型。

这是表单保存代码:

profile = Profile.objects.get(user = User.objects.get(username=self.cleaned_data['user']))

connector = Connector(profile=profile)
connector.profile = profile
connector.attributes = self.cleaned_data['selected_attributes']
connector.save()

当我尝试在表单中保存选定的属性时,我在堆栈跟踪中收到此错误:

ValueError: "<Connector: Connector object>" needs to have a value for field "connector" before this many-to-many relationship can be used.

我正在使用效率低下的数据库,必须使用这些模型。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

在保存M2M关系之前,必须保存对象以使其具有主键。将代码更新为

connector = Connector(profile=profile)
connector.profile = profile
connector.save()
connector.attributes = self.cleaned_data['selected_attributes']
connector.save()