【问题标题】:AttributeError __exit__ while trying to save a model.db from a form in Django 1.7尝试从 Django 1.7 中的表单保存 model.db 时出现 AttributeError __exit__
【发布时间】:2015-01-03 13:44:31
【问题描述】:

我用 django.db.models.Model 创建了一个模型

class MyModel(models.Model):
    my_field = models.CharField(max_length=50)

还有一个使用 django.forms.ModelForm 的表单。

class MyModelForm(ModelForm):

    class Meta:
        model = MyModel
        exclude = []

由于之前我不应该覆盖 init 的问题,我对 MyModel.save() 进行了单元测试。所以单元测试通过了。我还可以使用初始化脚本填充数据库,所以我认为我的模型没有问题。但是使用表单中的数据时无法保存。

这是我用来从表单中恢复对象的代码:

if request.method == 'POST':
    form = MyModelForm(request.POST)
    if form.is_valid():
        my_model_object = form.save()
        return render(request, 'validate.html')
else:
    form = MyModelForm()
return render(request, 'create_mymodel.html',
              {'form': form})

不幸的是,当我调用 save() 时,我收到以下错误:

my_project/views/views.py in my_function
my_model_object = form.save()
...django/db/models/base.py in save
force_update=force_update, update_fields=update_fields)
...django/db/models/base.py in save_base
 self._save_parents(cls, using, update_fields)
...django/db/models/base.py in _save_parents
self._save_table(cls=parent, using=using, update_fields=update_fields)
...django/db/models/base.py in _save_table
 result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
...django/db/models/base.py in _do_insert
 using=using, raw=raw)
...django/db/models/manager.py in   manager_method
  return getattr(self.get_queryset(), name)(*args, **kwargs)
...django/db/models/query.py in _insert
  return query.get_compiler(using=using).execute_sql(return_id)
...django/db/models/sql/compiler.py in execute_sql
   with self.connection.cursor() as cursor:

AttributeError at my_url/
__exit__

Request Method:     POST
Request URL:    http://localhost:8000/my_url/
Django Version:     1.7
Exception Type:     AttributeError
Exception Value:    __exit__

如果我使用 save(commit=False),它会起作用,但我的对象当然不在数据库中。我还尝试使用表单中的所有属性并实例化和保存 MyModel,但它也不起作用。事实上,如果我在任何时候尝试保存它,我都会收到错误消息。我的代码来自https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/

有什么建议吗?

【问题讨论】:

  • 而不是平淡无奇的“我有一个AttributeError __exit__ 一路过来”......你应该粘贴回溯。那会更有帮助。
  • 抱歉,非常正确,我添加了堆栈跟踪,希望对您有所帮助。
  • 虽然是一个非常疯狂的猜测,但我唯一看到的一点是exclude 属性是一个空列表。尝试将其更改为 fields = "__all__"
  • 我仍然遇到字段 = "all" 的错误。不过看起来更好。

标签: python django forms django-1.7


【解决方案1】:

因为即使它不起作用,我也必须将其投入生产,所以我做到了..问题消失了。所以我认为这是数据库配置的问题。然后问题出现在一个不相关的 django 项目上,我碰巧复制粘贴了调试配置。

原来是django调试工具栏的配置造成的,不知道具体在哪里,因为我简单的压制了。如果您有同样的问题,请检查您的设置文件!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2021-09-03
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多