Django - forms.Form无法保存当前用户和表单有效但未保存

时间:2015-09-08 11:51:30

标签: python django forms user-input

我修改了我的代码以使用forms.ModelForm,以便我可以修改网页表单的宽度。我现在遇到的问题是ForeignKeys不适用于forms.Form,我需要在表单中保存活动用户,以及提交请求的当前时间。

以下是我的文件(我排除了所有必要的导入)和当前的解决方法,它给了我以下错误:table chemrun_chemrun has no column named owner_id。我很高兴有任何帮助来解决这个问题:)

来自models.py

class ChemRun(models.Model):
    owner           =       models.ForeignKey('auth.User')
来自forms.py

class ChemRunForm(forms.ModelForm):
    title           =       forms.CharField(max_length=50)
    status          =       forms.CharField(max_length=20, initial="In queue")
    created_date    =       forms.DateTimeField(initial=timezone.now, required=False)

    def __unicode__(self):
            return self.title

    class Meta:
            model   =       ChemRun
            exclude =       {'created_date', 'status', 'owner'}

来自views.py

@verified_email_required
def create(request):
    if request.POST:
            form = ChemRunForm(request.POST)
            if form.is_valid():
                    m = form.save(commit=False)
                    m.created_date  =       timezone.now
                    m.owner         =       request.user
                    m.save()
                    return HttpResponseRedirect('/accounts/profile')
    else:
            form = ChemRunForm()

    args = {}
    args.update(csrf(request))
    args['form'] = form

    return render_to_response('interface/newrun.html', args, context_instance=RequestContext(request))
来自urls.py

urlpatterns = [
    url(r'^create/$', 'chemrun.views.create', name='create'),
]

1 个答案:

答案 0 :(得分:1)

我看到了两个解决问题的实用方法:

  1. 由于该领域的所有者'对于模型来说是新手,您必须在迁移中添加一个默认ID,以便将该列放入已存在的数据中。
  2. 你可以设置' blank = null'在'所有者'字段,就这样django它不会强制该列中的数据。
  3. 你在评论中说过,在命令之前,makemigrations'没有问你什么,现在确实如此,这是因为现在你在那张桌子上有记录,如果你添加一个新列,django或postgres都不知道在旧记录中该列中放什么,也许你可以冲洗'你的数据库?当然,只有它是一个开发数据库。