You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django表单保存:对象为None,但表单有效的问题

问题描述:

在Django中使用表单保存时,出现以下错误信息:

Object is None, but form is valid

代码示例:

假设我们有一个模型类Checklist,它有一个CharField name:

from django.db import models

class Checklist(models.Model):
    name = models.CharField(max_length=100)

我们还有一个表单类ChecklistForm,它允许用户创建一个Checklist:

from django import forms
from .models import Checklist

class ChecklistForm(forms.ModelForm):
    class Meta:
        model = Checklist
        fields = ('name',)

当用户提交表单时,我们想要创建并保存一个新的Checklist对象。我们可以使用以下视图函数

from django.shortcuts import render, redirect
from .forms import ChecklistForm
from .models import Checklist

def create_checklist(request):
    if request.method == 'POST':
        form = ChecklistForm(request.POST)
        if form.is_valid():
            # Create and save checklist object
            checklist = form.save(commit=False)
            checklist.save()
            return redirect('checklist_list')
    else:
        form = ChecklistForm()
    return render(request, 'create_checklist.html', {'form': form})

问题

出现此错误的原因是尝试保存一个不存在的对象。form.save(commit=False)将返回未保存的Checklist对象,但此对象仍未在数据库中保存。我们需要在保存之前分配一个默认值。我们可以将以下内容添加到form_valid()方法中:

from django.http import HttpResponseRedirect

def form_valid(self, form):
    if self.object is None:
        self.object = form.save(commit=False)

    self.object.save()  # Save the object with a default value

    return HttpResponseRedirect(self.get_success_url())

在这个例子中,我们将self.object设置为一个新对象,然后将其保存。在这个例子中,我们分配一个默认值,但您可以分配其他值,例如当前用户或当前时间戳。

您还可以覆盖该视图的get_form_kwargs()方法并将所需的默认值添加到字典中:

def get_form_kwargs(self):
    kwargs = super().get_form_kwargs()
    if self.object is None:
        kwargs['initial'] = {'user': self.request.user}
    return kwargs

在这个例子中,如果self.object为None,则将用户添加到表单的初始数据中。不管使用什么方法,您都需要分

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

[验证码] KgCaptcha风险监测方法

appCdn = "https://cdn.kgcaptcha.com"; // 前端验证成功后颁发的 token,有效期为两分钟 $request->token = $_POST["kgCaptchaToken"]; // 当安全策略中的防控等级为3时必须填写 $request->userId = "kgCaptchaDemo"; // 请求超时时间,秒 $request->connectTimeout = 10; $requestResult = $request->sendRequest(); if ($requestResult->code === 0) { // 验签成功逻辑处理 ec...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

Django表单保存:对象为None,但表单有效的问题 -优选内容

通过 Flink Connector驱动导入
大小为 2024-03-25 注意 请使用与 Flink 版本相匹配的驱动,以保障功能正常使用。 Flink DataStream API 驱动驱动版本 匹配 Flink版本 备注 下载链接 0.4 1.15 及以上版本 Java 8 及以上版本 【附件下载】: flinkDataStreamApiPlayground-0.4-SNAPSHOT.jar,大小为 使用示例 通过 Flink SQL 导入下面是通过 FlinkSQL 将数据表单加载到 ByteHouse 企业版数据表中的示例。 说明 您可参见获取集群连接信息页面来获取需要...
[验证码] KgCaptcha风险监测方法
appCdn = "https://cdn.kgcaptcha.com"; // 前端验证成功后颁发的 token,有效期为两分钟 $request->token = $_POST["kgCaptchaToken"]; // 当安全策略中的防控等级为3时必须填写 $request->userId = "kgCaptchaDemo"; // 请求超时时间,秒 $request->connectTimeout = 10; $requestResult = $request->sendRequest(); if ($requestResult->code === 0) { // 验签成功逻辑处理 ec...
创建配置文件
本文描述了如何通过边缘智能控制台创建配置文件。配置文件对应 K8s 中的 ConfigMap 对象,可被用作数据卷挂载到容器。 前提条件您已经开通了边缘智能产品。如您还未开通产品,请参见准备工作。 操作步骤 在左侧导航栏... 您可以在 容器配置 > 存储配置 > 存储卷 中,将指定的 配置文件 作为数据卷挂载。相关操作,请参见创建工作负载、创建模板版本。 配置说明类型 配置项 说明 基础信息 名称 为配置文件设置名称。输入要求如下: 允许...
创建密钥文件
本文描述了如何通过边缘智能控制台创建密钥文件。密钥文件对应 K8s 中的 Secret 对象,可被用作数据卷挂载到容器。 前提条件您已经开通了边缘智能产品。如您还未开通产品,请参见准备工作。 操作步骤 在左侧导航栏顶... 您可以在 容器配置 > 存储配置 > 存储卷 中,将指定的 密钥文件 作为数据卷挂载。相关操作,请参见创建工作负载、创建模板版本。 配置说明类型 配置项 说明 基础信息 名称 为密钥文件设置名称。输入要求如下: 允许...

Django表单保存:对象为None,但表单有效的问题 -相关内容

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询