在Django中更新外键字段
我有一个表单,里面有一个下拉框,用来选择外键字段。这个表单可以保存用户的选择,但我希望在查看时能更新数据库中的条目,而不是插入一个新的。请问我该怎么做比较好?
现在的功能是:
def formset_valid(self, formset):
self.object = formset.save()
self.object.save()
return HttpResponseRedirect(self.get_success_url())
我试过这样做:
d = RevisionDefaultType.objects.get(id=1)
n = RevisionSettings.objects.get(self.object)
d.defaultrevisiontype = n
d.save()
但是它报错说要更新的数据不是一个实例。
2 个回答
2
你需要在你的 save()
函数里加上 force_update=True
。
想了解更多关于 Django 如何判断是更新还是插入 的信息,可以查看 Django 文档中的这个链接。
2
我成功地调整了更新示例,来自这个链接:https://docs.djangoproject.com/en/dev/topics/db/queries/#saving-foreignkey-and-manytomanyfield-fields。看起来现在运行得很好。
def formset_valid(self, formset):
self.object = formset.save(commit=False)
revdefault = RevisionDefaultType.objects.get(pk=1)
revget = RevisionSettings.objects.get(global_revision_type=self.object)
revdefault.defaultrevisiontype = revget
revdefault.save()
return HttpResponseRedirect(self.get_success_url())
再次感谢你的帮助。