You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django CreateView中返回已匹配的现有记录?

Django实现GetOrCreate功能的简洁方案

我使用Django自带的generic.edit.CreateView根据用户输入创建对象,我的MyModel带有UniqueConstraint约束,因此当新对象与现有记录匹配时,创建操作会失败。

但我不想告知用户“因重复记录导致创建失败”,而是直接返回已存在的对象——这才是用户实际需要的结果。

我尝试过重写表单的save方法:

def save(self, commit=True):
    return MyModel.get_or_create(value=self.cleaned_data['value'])[0]

但这个方法无效,因为form._post_clean会调用form.instance.full_clean,该方法默认参数validate_constraints=True,导致在表单验证阶段就会返回错误。

本质上我需要一个GetOrCreateView,但不确定除了重写form._full_clean之外,有没有更简洁的实现方式。注:我不需要UpdateView,因为无法提前预知要返回哪个现有对象。

编辑:在长时间处理验证问题后,我最终放弃了CreateView,转而使用更简单的FormView。FormView会先收集所有用户输入,然后在form_valid(self, form)方法中调用get_or_create(form.cleaned_data[...])来实现需求。

内容的提问来源于stack exchange,提问作者user2283347

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:20:05