Django ModelForm 不将数据保存到数据库

2024-05-07

Django 初学者在使用表单时遇到很多困难。是的,我已经完成了本教程并浏览了很多网络 - 我所拥有的是我在这里和其他网站上找到的内容的混合体。我正在使用 Python 2.7 和 Django 1.5。 (虽然官方文档很广泛,但它往往假设您已经了解其中的大部分内容 - 不适合作为初学者参考,甚至不适合作为高级教程)

我正在尝试为“扩展”用户详细信息创建一个表单 - 例如。公司名称、街道地址等,但表单数据未保存到数据库中。

最初我尝试创建一个扩展标准的模型User模型,但我放弃了——需要修改太多,而且在这个阶段它已经超出了我的能力范围。 所以我创建了一个新模型,名为UserProfile:

class UserProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, unique=True) 
    company = models.CharField(max_length=50, blank=True)
    address1 = models.CharField(max_length=50, blank=True)
    address2 = models.CharField(max_length=50, blank=True)
    city = models.CharField(max_length=20, blank=True)
    region = models.CharField(max_length=20, blank=True)
    postcode = models.CharField(max_length=10, blank=True)
    country = models.CharField(max_length=20, blank=True)
    phone = models.CharField(max_length=30, blank = True)

我在网上看到了不同的参考资料,关于我是否应该使用以下链接链接到用户模型:ForeignKey(如上所述)或使用 OneToOne。

我正在尝试使用 ModelForm(保持简单的形式)。这是我的 forms.py

from django.forms import ModelForm
from .models import UserProfile   

class UserDetailsForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ['company','address1','address2','city','region', 'postcode','country','phone']

这是我的观点:

def UserDetailsView(request):
    #f = 0
    if request.method == 'POST':
        f = UserDetailsForm(request.POST, instance = request.user)
        if f.is_valid():
            f.save()
    else:
        f = UserDetailsForm(request.POST , instance = request.user)

    print "UserDetails objects: ", (UserProfile.objects.all()) 

    return render_to_response('plagweb/console/profile.html', 
                              { 'form': f}, 
                              context_instance=RequestContext(request))     

(是的,用户个人资料与用户详细信息之间存在不一致 - 这是我所有黑客行为的产物,一旦我开始工作就会修复)

诊断显示f.is_valid()返回 True。 同样,诊断显示UserProfile.objects.all()如同空的一样。我在上面的 save() 视图中以及 Django 控制台中尝试了此操作。

这是我的模板:

 <form method="POST" action="">
 <table>{{ form }}</table>
 <input type="submit" value="Update" />
 {% csrf_token %}
 </form>

目前主要问题是表单数据没有保存到数据库中。我不知道是否正在读取(一旦我在数据库中有一些数据......)

一种想法是,User关系可能会引起问题?


附录,来自 Daniel Roseman 的有用评论/帮助:


我不确定这里到底出了什么问题,但一个问题肯定是你正在通过instance=request.user实例化表单时。这绝对是错误的:request.user是 User 的实例,而表单基于UserProfile.

相反,你想做这样的事情:

f = UserDetailsForm(request.POST)
if f.is_valid():
    profile = f.save(commit=False)
    profile.user = request.user
    profile.save()

至于ForeignKey 与OneToOne,您绝对应该使用OneToOne。使用ForeignKeys 的建议是在Django 1 发布前一段时间提出的——差不多五年前了——因为OneToOne 的原始实现很差并且需要重写。您当然不会在这里找到任何建议使用 FK 的最新文档。

评论后编辑现在的问题是,即使请求不是 POST,您也要使用第一个参数 data 实例化表单,因此request.POST是一个空字典。但数据参数,即使它为空,也优先于作为初始数据传递的任何内容。

您应该回到实例化表单中的原始模式if声明 - 但一定不要通过request.POST当做这件事时else clause.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django ModelForm 不将数据保存到数据库 的相关文章

随机推荐

  • 使用 %w[] 创建包含空字符串的数组

    创建包含空字符串的数组 a b c 不是一个空格字符串 使用 W我可以用 W a b c 我也可以连接数组 但是是否可以使用空字符串创建数组 w 几个选项 W a b c z W a b c lt lt 我知道这没有使用 w 语法 但为了更
  • 如何从 obj-c / ios 中的堆栈跟踪获取源代码行

    I use NSSetUncaughtExceptionHandler将堆栈跟踪打印到 iPhone 中的本地文件 该文件将在下次应用程序启动时发送到我们的服务器 然后我可以检查异常数据并修复错误 在某些崩溃中 我有模块名称和引发异常的函数
  • 如何在图片上方画一条线?

    如何在 Crystal Reports 中的图片上方显示一条线 我目前使用的是水晶报表 8 5 我在报告中使用 jpeg 图像 并将图像标题部分设置为 底层以下部分 我在图像标题部分上方添加了另一个标题 画了一条线 然后给出了 在下面的部分
  • 是否可以用 C 语言编写 malloc 的一致实现?

    这是后续字符数组可以与任何数据类型一起使用吗 https stackoverflow com questions 38510557 我了解动态内存和 malloc 的常见实现 可以在以下位置找到参考资料维基百科 https en wikip
  • 我应该在 Android 1.x 和 2.x 应用程序中部署什么样的图标?

    事情是这样的 在 Android 1 5 和 1 6 中我们有图标设计指南 http developer android com guide practices ui guidelines icon design html 本指南中有应用程
  • 哪个版本的 ruby​​ bug 较少?

    我最近编写了一些复杂的 ruby 脚本 最终会在随机时间和随机位置因段错误而失败 例如 nokogiri mechanize inov 超时 我在 Windows 7 下的 1 9 1 p 129 1 8 6 p 369 和 ubuntu
  • Angular2:如何在实现 routerCanDeactivate 时防止/取消历史操作?

    routerCanDeactivate 成功阻止导航离开组件 routerCanDeactivate nextInstruction ComponentInstruction prevInstruction ComponentInstruc
  • 反应。如何将 props 从 onClick 传递到 function

    我是反应新手 我正在尝试创建一个应用程序 在其中我可以单击按钮 并且函数将运行倒计时器 但是如果我从 onClick 传递道具来开始像这样的函数 onClick begin props subject 该函数将在我点击之前运行 如果我在不带
  • 收到警告:空值被聚合或其他 SET 操作消除

    我有这个架构 create table t id int d date insert into t id d values 1 getdate 2 NULL 做的时候 declare mindate date select mindate
  • 始终保持数据库连接打开可以吗?

    我在业余时间从事单用户桌面数据库应用程序之类的工作 并且我总是不确定我所做的设计选择 现在 就目前情况而言 每当用户想要与数据库 这是一个本地 SQLite 数据库 因此通常只有一个用户一次看到它 交互时 应用程序就会创建一个新连接 执行它
  • 如何在 Bash 中将字符串转换为小写

    有办法进去吗bash questions tagged bash将字符串转换为小写字符串 例如 如果我有 a Hi all 我想将其转换为 hi all 有多种方法 POSIX标准 https en m wikipedia org wiki
  • AxAcroPDF - Vista64 类未注册错误

    我们有一个用 C 编写的 WinForms 应用程序 它使用 AxAcroPDFLib AxAcroPDF 组件来加载和打印 PDF 文件 在 Windows XP 下一直运行没有任何问题 我已将开发环境移至 Vista 64 位 现在除非
  • flutter 检测 url 并显示预览

    我正在尝试制作一个类似于 wats app 的链接预览功能 它有两个部分 从文本字段检测 URL 显示该 URL 的预览 第 2 部分有很多插件可以显示预览 但我一直坚持第 1 部分 即如何检测和解析用户在文本字段中输入的 URL 还有一个
  • VB.NET 中的自动递增文本框

    单击按钮后如何增加文本框内容 将其放在按钮单击事件中 Dim int As Integer Integer TryParse TextBox1 Text int TextBox1 Text int 1
  • Enzyme 和 React 路由器:如何使用 useHistory 浅层渲染组件

    我一直在尝试用以下方式渲染组件shallow 由enzyme 该组件正在使用useHistory from react router dom const baseMatch match lt id string gt path url pa
  • 如何实现复杂的sql命令

    我在 MySQL 中有一个 sql 表 其中包含以下记录 user dob john 1 10 96 jane 3 4 97 jill 1 8 96 jack 2 9 00 jane 12 14 07 john 1 11 98 这是我要执行
  • 为什么 HttpClient 使套接字保持打开状态?

    在创建 使用和处置多个 HttpClient 时 我注意到有套接字处于 TIME WAIT 状态 例如 运行以下命令后 using System Net Http namespace HttpClientTest public class
  • 使用在 Linux 上运行的 .NET Core 时连接到 MongoDB 失败

    我正在使用 ASP NET Core 2 0 构建一个网站 一个月前刚刚从 1 1 升级 MongoDB 也由 Mongo Atlas 在 AWS 上托管 这个 MongoDB 实例有 3 个副本集 需要 SSL 进行连接 并且已经设置可以
  • 计算行的排名

    我想根据一个字段对用户 ID 进行排名 对于相同的字段值 排名应该相同 该数据位于 Hive 表中 e g user value a 5 b 10 c 5 d 6 Rank a 1 c 1 d 3 b 4 我怎样才能做到这一点 可以使用ra
  • Django ModelForm 不将数据保存到数据库

    Django 初学者在使用表单时遇到很多困难 是的 我已经完成了本教程并浏览了很多网络 我所拥有的是我在这里和其他网站上找到的内容的混合体 我正在使用 Python 2 7 和 Django 1 5 虽然官方文档很广泛 但它往往假设您已经了