在Django中更新外键字段

3 投票
2 回答
8889 浏览
提问于 2025-04-18 18:02

我有一个表单,里面有一个下拉框,用来选择外键字段。这个表单可以保存用户的选择,但我希望在查看时能更新数据库中的条目,而不是插入一个新的。请问我该怎么做比较好?

现在的功能是:

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())

再次感谢你的帮助。

撰写回答