拯救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)

谁能帮我找出如何保存django
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