“User”对象没有属性“get”

2023-12-25

我正在尝试构建一个ModelForm从这个解决方案here https://stackoverflow.com/questions/862522/django-populate-user-id-when-saving-a-model,但是我收到此错误:

'User' object has no attribute 'get'

这个想法是为了得到ModelForm构建一个表单,提交时用户已登录updates入口。

models.py 是:

class UserDetailsForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ['mobile_phone']

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        return super(UserDetailsForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kwargs):
        kwargs['commit']=False
        obj = super(UserDetailsForm, self)
        if self.request:
            obj.user = UserProfile.objects.get(user=self.request.user)
        obj.save()

我在 models.py 中的模型是

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    mobile_phone = models.CharField(max_length=30,help_text='Max 30 characters.',blank=True)
    #have shortened this for simplicity
    def __unicode__(self):
        return self.mobile_phone

根据这里的请求,我们从views.py 中回溯了问题:

    userprofile = UserProfile.objects.get(user=request.user)
    if request.method == 'POST':
        form = UserDetailsForm(request.user, request.POST, request.FILES)
        if form.is_valid(): # it dies here
            form.save()
            return HttpResponseRedirect('/members-contact/')

写这个答案是因为我在一周内被这个错误咬了两次。 来到这个问题并没有帮助我解决问题。 此代码的问题在于您已将 request.user 对象传递到 UserDetailsForm 的 init 函数中。和你的定义init不处理 request.user 发生的情况。

userprofile = UserProfile.objects.get(user=request.user)
if request.method == 'POST':
    ====>form = UserDetailsForm(request.user, request.POST, request.FILES)
    if form.is_valid(): # it dies here
        form.save()
        return HttpResponseRedirect('/members-contact/')

参见箭头。如果将其与 __init__of 用户详细信息表单的定义进行比较。您可以看到 init 并不期望该 request.user

class UserDetailsForm(ModelForm):
   class Meta:
       model = UserProfile
       fields = ['mobile_phone']

  def __init__(self, *args, **kwargs):
      self.request = kwargs.pop('request', None)
      return super(UserDetailsForm, self).__init__(*args, **kwargs)

请注意,编写 init 来传递对象是有正当理由的。

def __init__(self, some_object, *args, **kwargs):
     super(SomeFormClass, self).__init__(self, *args, **kwargs)
     self.fields['some_field'].queryset = SomeModel.objects.filter(some_field = some_object)

另请注意,modelform 的 __init__ 的默认 def 具有 __init__(self, *args, **kwargs)

上面的动态表单初始化就是一个很好的例子。

在这种情况下,django 似乎将 request.user 中传入的变量视为 some_field ,并尝试调用“UserModel”没有的名为 get 的方法。如果您检查堆栈跟踪,您会注意到。下面的堆栈跟踪是一个模拟示例。

Traceback (most recent call last):
  File "/home/user/.local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
  return render(request, self.template_name, context)
  File "/home/user/.local/lib/python3.5/site-    packages/django/shortcuts.py", line 30, in render
  content = loader.render_to_string(template_name, context, request, using=using)
 ---
 ---
 ---
 packages/django/forms/forms.py", line 297, in non_field_errors
 return self.errors.get(NON_FIELD_ERRORS,   self.error_class(error_class='nonfield'))
 File "/home/user/.local/lib/python3.5/site-packages/django/forms/forms.py", line 161, in errors
 self.full_clean()
 ---
 ---
 ---
self._clean_fields()
File "/home/user/.local/lib/python3.5/site-packages/django/forms/forms.py", line 382, in _clean_fields
===>value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))<====
File "/home/sodara/.local/lib/python3.5/site-packages/django/forms/widgets.py", line 238, in value_from_datadict
====> return data.get(name) <====
AttributeError: 'SomeObject' object has no attribute 'get'

data.get 是方法调用结果的返回值 field.widget.value_from_data_dict ... 如果您注意到,SomeObject 被视为此处的数据,其 get 方法正在被调用。

要回答这个问题,要么定义 init 来处理 request.user

def __init__(self, user, *args, **kwargs):
    super(YourFormClass, self).__init__(*args, **kwargs):
    self.fields["some_field"].some_attr = user

或者在没有 request.user 的情况下调用表单

    `form = YourFormClass(request.POST, request.FILES)`

如果您决定选择选项一。你必须记住在调用 self.fields 之前先调用 super。因为 self.fields 是由 super 方法创建的。如果不这样做,您将遇到另一个属性错误“没有名为字段的字段”。

Edit

Django提供了一个方便的方法get_form_kwargs用于向继承自的表单视图的 init 添加属性django.views.generic.edit.ModelFormMixin例如FormView.

class MyFormView(FormView):
    form_class = MyModelFormClass

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

class MyModelFormClass(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user') # Important to do this
        # If you dont, calling super will fail because the init does
        # not expect, user among the fields.
        super().__init__(*args, **kwargs)
        self.fields['some_field'].queryset = SomeModel.objects.filter(user=user)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“User”对象没有属性“get” 的相关文章

  • 使用 Marshmallow 中的数据更新行 (SQLAlchemy)

    我正在使用 Flask Flask SQLAlchemy Flask Marshmallow marshmallow sqlalchemy 尝试实现 REST api PUT 方法 我还没有找到任何使用 SQLA 和 Marshmallow
  • django render_to_string 缺少信息

    为什么我的电子邮件 正文部分 不包含该消息 这是我的代码 message render to string contact template txt contact name contact name contact email conta
  • 使用 Flask SQLAlchemy 进行表(模型)继承

    我遵循了这个建议question https stackoverflow com questions 1337095 sqlalchemy inheritance但我仍然收到此错误 sqlalchemy exc NoForeignKeysE
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 打印一个 Jupyter 单元中定义的所有变量

    有没有一种更简单的方法来以漂亮的方式显示单个单元格中定义的所有变量的名称和值 我现在做的方式是这样的 但是当有30个或更多变量时我浪费了很多时间 您可以使用whos http ipython readthedocs io en stable
  • Docker:通过 Gunicorn 运行 Flask 应用程序 - Worker 超时?表现不佳?

    我正在尝试创建一个用Python Flask编写的新应用程序 由gunicorn运行 然后进行dockerized 我遇到的问题是 docker 容器内的性能非常差 不一致 我最终得到了响应 但我不明白为什么性能会下降 有时我会在日志中看到
  • 检查对象数组中的多个属性匹配

    我有一个对象数组 它们都是相同的对象类型 并且它们有多个属性 有没有办法返回一个较小的对象数组 其中所有属性都与测试用例 字符串匹配 无论该属性类型是什么 使用列表理解all http docs python org 3 library f
  • 出现意外的关键字参数“timeout”(Python 中的 google-cloud-storage)

    使用 google cloud storage 的 Python 项目在本地运行良好 但是当它从 App Engine 运行时 会显示错误 Traceback most recent call last File opt python3 7
  • keras 预测内存交换无限期增加

    我使用keras实现了一个分类程序 我有一大组图像 我想使用 for 循环来预测每个图像 然而 每次计算新图像时 交换内存都会增加 我尝试删除预测函数内部的所有变量 并且我确信该函数内部存在问题 但内存仍然增加 for img in ima
  • 如何在 Numpy 中实现垃圾收集

    我有一个名为main py 它引用另一个文件Optimisers py它仅具有功能并用于for循环进入main py 这些函数都有不同的优化功能 This Optimisers py然后引用另外两个类似的文件 其中也只有函数 它们位于whi
  • 如何在 Spyder IDE 中安装 Selenium 包

    我刚刚在工作中安装了 Spyder IDE 仅 Spyder 不是整个 Anaconda 并且希望使用 FireFox 自动化我的工作 我的问题是 如何安装 Selenium 软件包 I figured it out Here is ins
  • pandas apply:函数名是否带引号的区别

    简单数据框定义示例 df pd DataFrame A 2 4 1 B 8 4 1 C 6 2 7 df A B C 0 2 8 6 1 4 4 2 2 1 1 7 尝试理解以下块中函数参数调用的差异 df apply sum df app
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • 从 subprocess.Popen 获取整个输出

    我通过调用 subprocess Popen 得到了一个有点奇怪的结果 我怀疑这与我对 Python 的陌生有很大关系 args cscript USERPROFILE tools jslint js USERPROFILE tools j
  • Django基于PK和另一个字段保存对象

    我正在尝试将 postgresql 中的分区表与 Django 安装一起使用 通过Google搜索主题 我发现Django本身不支持分区 所以我自己对表进行了分区 我根据第二个字段对表进行分区 该字段是另一个表上的外键 基本模型设置如下 c
  • 对 pandas 数据框中的每一列应用函数

    我如何以更多的熊猫方式编写以下函数 def calculate df columns mean self df means for column in df columns columns tolist cleaned data self
  • 如何在 Python 中解析损坏的 XML?

    我无法影响的服务器发送的 XML 非常损坏 具体来说 Unicode WHITE STAR 将被编码为 UTF 8 E2 98 86 然后使用 Latin 1 转换为 HTML 实体表 我得到的是 acirc 98 86 9 个字节 位于声
  • Synapse Notebook 参考 - 使用参数从另一个笔记本调用 Synapse Notebook

    我有一个带有参数的突触笔记本 我试图从另一个笔记本调用该笔记本 我正在使用 run 命令 我应该如何将参数从基本笔记本传递到正在调用的笔记本 另外 对我来说 上述答案不起作用 作为对此问题的单独解决方案 下面是一个答案 打开笔记本并转到最右
  • 在 Gensim 中通过 ID 检索文档的字符串版本

    我正在使用 Gensim 进行一些主题建模 并且已经达到使用 LSI 和 tf idf 模型进行相似性查询的程度 我取回 ID 集和相似点 例如 299501 0 64505910873413086 如何获取与 ID 在本例中为 29950

随机推荐

  • iOS 4.1 中的 NSDate 格式

    iOS 4 0 中的 NSDate date 用于返回日期 格式为 2010 09 15 09 28 26 0530 但现在在 iOS 4 1 中 它返回以下格式的日期 2010 09 15 09 28 26 格林威治标准时间 在我的应用程
  • 在Java中向日期添加天数[重复]

    这个问题在这里已经有答案了 如何在 Java 中为日期添加 x 天 例如 我的日期是01 01 2012 using dd mm yyyy作为格式 添加 5 天 输出应为06 01 2012 SimpleDateFormat sdf new
  • Google电子表格:在单元格值更改时运行脚本

    在电子表格中 我有两张表 和计算器 当我更改 上的值时 B1 即工作表的单元格 B1 我想运行脚本 更改 实际上清除 计算器 的值 B3 即工作表 计算器 的单元格 B3 这是我的代码 我通过电子表格 gt 工具 gt 脚本编辑器创建它 所
  • 通过 AppCompatDelegate 进行 Android Jetpack Compose 语言切换不起作用

    我正在尝试为我正在开发的应用程序构建一个应用程序内语言切换器 但我已经尝试了 Stackoverflow 上几乎所有可用的方法 我也尝试过这里的官方指南https developer android com guide topics res
  • 设计需要根据泛型类型进行重载的 API 的可能性有哪些?

    在给定的班级中Example a 我需要以下两个功能可用 void doSomething Supplier a b void doSomething Supplier b 实现这一目标的可能性有哪些 我知道以下方法 给函数起不同的名字 对
  • 捕获来自 Web 浏览器控件的所有请求和响应?

    有没有办法捕获并打印出来自 Web 浏览器控件的所有请求和响应 包括异步请求 你有没有想过使用Fiddler http www fiddler2 com fiddler2 他们甚至还有一个API http www fiddler2 com
  • Qt 没有属性“AlignCenter”[重复]

    这个问题在这里已经有答案了 我在 Python 3 5 上使用 PyQt5 我想做一个QLabel带有居中文本的小部件 因此 我称之为setAlignment方法与AlignCenter flag 这是一个 MWE import sys f
  • HTML 中的视口是什么。

    HTML 中的视口是什么 您能否举一些有关如何访问视口详细信息的示例 视口是用户当前可以看到的网页部分 滚动条移动视口以显示页面的其他部分 按照本文的说明在 Javascript 中获取视口尺寸 http andylangton co uk
  • 在mysql数据库中存储大量数字的问题

    我正在使用 mysql db 来保存 id 一切正常 但现在像这样的id 10000000754987 存储为1 0000000754987E 14 我该如何解决它 该字段设置为 varchar 255 个字符限制 我很感激任何帮助 Tha
  • 确定模板中结构或元组的成员偏移量

    我想编写一个模板函数 将表写入 HDF5 文件 签名应该类似于 template
  • 使用 Codeigniter 发送电子邮件时出现问题 - 在邮件正文中发送标头

    codeigniter 中的电子邮件类出现奇怪的问题 当我直接向我的 Gmail 帐户电子邮件地址发送电子邮件时 效果很好 但是 如果我将电子邮件发送到不同的电子邮件地址并使用 POP3 将该电子邮件地址导入到 gmail 中 则由于某种原
  • 从分数列表生成标准竞赛排名

    给定分数列表 例如 5 5 4 2 2 0 我希望返回标准竞赛排名 1 1 3 4 4 6 From 维基百科的排名页面 http en wikipedia org wiki Ranking 这里是SRC的总结 标准竞赛排名 1224 排名
  • 如何在流星中响应式聚合 mongodb

    我是流星新手 我建立了发布 订阅的概念 我在反应式执行聚合时遇到以下错误 客户端代码 import Template from meteor templating import ReactiveVar from meteor reactiv
  • 在我的 virtualenv 中,我需要对所有命令使用 sudo

    我设置了一个virtualenv 这是有效的 但由于某种原因我需要使用sudo对于像这样简单的命令mkdir 显然我做错了什么 知道它可能是什么吗 Thanks 检查目录权限和所有者并给出 sudo chown R me me virtua
  • 模拟无法与 RSpec 和 Devise 配合使用

    我目前正在使用 RSpec 2 开发 Rails 3 Web 应用程序 并且我们使用 Devise 进行身份验证 我们的一个 很快还有许多 控制器要求用户登录 我知道 Devise 提供了sign in测试助手 但它可以与 RSpec 或
  • 在JPanel中调用setEnabled(false)的原因

    我现在在 Swing 上工作了一段时间 但在实践中从未遇到过需要打电话的情况setEnabled false in JPanel 尽管如此 我有时会在一些复杂的图形用户界面中看到这样的代码 但我真的不明白为什么有人想用它 所以 请给我一些现
  • 使用 React Router v4 / v5 的嵌套路由

    我目前正在努力使用 React Router v4 来嵌套路由 最接近的例子是路由配置React Router v4 文档 https react router now sh 我想将我的应用程序分成两个不同的部分 前端和管理区域 我在想这样
  • 按特定顺序执行测试套件

    我正在使用 maven failsafe 插件来触发 testng 套件 其配置类似于
  • 如何将 `getOrWaitUntilNonEmpty` 作为单个衬垫执行?

    我有一个高级代码结构 如下所示 val block gt Option Seq String val matches block get toArray 问题是这段代码可能会失败 即 get being None取决于时间 例如我是页 sc
  • “User”对象没有属性“get”

    我正在尝试构建一个ModelForm从这个解决方案here https stackoverflow com questions 862522 django populate user id when saving a model 但是我收到