拯救Django向导:不太神奇
谁能帮我找出如何保存django拯救Django向导:不太神奇,django,forms,Django,Forms,谁能帮我找出如何保存djangoFormWizard?我已经搜索和阅读这些文档好几天了,但是我不明白向导为什么不保存 表格: 型号: class MyModel(models.Model): user = models.ForeignKey(User) year = models.IntegerField(('year'), max_length=4, choices=YEAR_CHOICES, default=datetime.datetime.now().year)
FormWizard
?我已经搜索和阅读这些文档好几天了,但是我不明白向导为什么不保存
表格:
型号:
class MyModel(models.Model):
user = models.ForeignKey(User)
year = models.IntegerField(('year'), max_length=4, choices=YEAR_CHOICES, default=datetime.datetime.now().year)
main_image = models.ImageField(upload_to='photos/main/')
.....
def save(self, **kwargs):
slug = '%s %s %s %s' % (self.user, self.year, self.model, self.series)
unique_slugify(self, slug)
super(MyModel, self).save()
def __unicode__(self):
return '%s %s' % (self.user, self.year)
回溯表明,错误来自于我的模型,在模型中,我超越了save方法来创建slug。当我使用ModelForm
时,这工作正常,但似乎导致FormWizard
出现问题
Traceback:
File "/lib/python2.7/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/lib/python2.7/django/views/generic/base.py" in view
48. return self.dispatch(request, *args, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in dispatch
223. response = super(WizardView, self).dispatch(request, *args, **kwargs)
File "/lib/python2.7/django/views/generic/base.py" in dispatch
69. return handler(request, *args, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in post
286. return self.render_done(form, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in render_done
328. done_response = self.done(final_form_list, **kwargs)
File "/myproject/myproject/forms.py" in done
55. instance.save()
File "/myproject/myproject/models.py" in save
95. slug = '%s %s %s %s' % (self.user, self.year, self.model, self.series)
File "/lib/python2.7/django/db/models/fields/related.py" in __get__
343. raise self.field.rel.to.DoesNotExist
Exception Type: DoesNotExist at /wizard/
Exception Value:
您能帮我找出如何保存向导,或如何纠正此错误吗?谢谢你的想法
编辑:在执行@Rohan的建议后
Traceback:
File "/lib/python2.7/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/lib/python2.7/django/views/generic/base.py" in view
48. return self.dispatch(request, *args, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in dispatch
223. response = super(WizardView, self).dispatch(request, *args, **kwargs)
File "/lib/python2.7/django/views/generic/base.py" in dispatch
69. return handler(request, *args, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in post
286. return self.render_done(form, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in render_done
328. done_response = self.done(final_form_list, **kwargs)
File "/myproject/myproject/forms.py" in done
56. instance.save()
File "/myproject/myproject/models.py" in save
97. super(MyModel, self).save()
File "/lib/python2.7/django/db/models/base.py" in save
463. self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/lib/python2.7/django/db/models/base.py" in save_base
551. result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/lib/python2.7/django/db/models/manager.py" in _insert
203. return insert_query(self.model, objs, fields, **kwargs)
File "/lib/python2.7/django/db/models/query.py" in insert_query
1593. return query.get_compiler(using=using).execute_sql(return_id)
File "/lib/python2.7/django/db/models/sql/compiler.py" in execute_sql
910. cursor.execute(sql, params)
Exception Type: InternalError at /wizard/
Exception Value: current transaction is aborted, commands ignored until end of transaction block
我认为
save()
方法中最有可能的,self.user
会给您带来问题。当您试图创建实例并保存它时,它不会被设置
在
done()
方法中,您需要在保存前将instance.user
设置为期望值。谢谢@Rohan。我想我理解,但也许你能帮我澄清一下?如果我尝试像这样添加request to done方法:def done(request,self,form_list,**kwargs):
这样我就可以设置instance.user=request.user
,我会得到一个类型错误:done()正好接受3个参数(给定2个)
。这就是你的意思吗?如果是这样的话,我可能需要创建自己的类继承自SessionWizardView
,并允许传递请求?但我不能完全肯定这是正确的方法。。任何指向正确方向的指示都是非常感谢的!谢谢request
是SessionWizardView
类的属性,因此您可以在done()
方法中以self.request.user
的形式获取它。谢谢@Rohan!但不幸的是,另一个错误发生了。我在上面贴了回溯。如果你有任何想法,我将非常感谢你的意见。再次感谢您将基于函数和基于类的视图组合在一起,这是不适用的。@cathy:没有此视图。相反,我遵循向导文档,使用如下url创建了一个通用视图:url(r'^wizard/$,CreateWizard.as_view([StepOneForm,StepTwoForm)),
。我非常仔细地跟踪了这个过程,但不确定为什么会出现错误。如果您有任何想法,我将不胜感激。谢谢!
Traceback:
File "/lib/python2.7/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/lib/python2.7/django/views/generic/base.py" in view
48. return self.dispatch(request, *args, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in dispatch
223. response = super(WizardView, self).dispatch(request, *args, **kwargs)
File "/lib/python2.7/django/views/generic/base.py" in dispatch
69. return handler(request, *args, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in post
286. return self.render_done(form, **kwargs)
File "/lib/python2.7/django/contrib/formtools/wizard/views.py" in render_done
328. done_response = self.done(final_form_list, **kwargs)
File "/myproject/myproject/forms.py" in done
56. instance.save()
File "/myproject/myproject/models.py" in save
97. super(MyModel, self).save()
File "/lib/python2.7/django/db/models/base.py" in save
463. self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/lib/python2.7/django/db/models/base.py" in save_base
551. result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/lib/python2.7/django/db/models/manager.py" in _insert
203. return insert_query(self.model, objs, fields, **kwargs)
File "/lib/python2.7/django/db/models/query.py" in insert_query
1593. return query.get_compiler(using=using).execute_sql(return_id)
File "/lib/python2.7/django/db/models/sql/compiler.py" in execute_sql
910. cursor.execute(sql, params)
Exception Type: InternalError at /wizard/
Exception Value: current transaction is aborted, commands ignored until end of transaction block