保存表单数据会重写同一行

Posted

技术标签:

【中文标题】保存表单数据会重写同一行【英文标题】:Saving form data rewrites the same row 【发布时间】:2011-08-19 00:15:50 【问题描述】:

我不知道如何保存创建新行的表单数据,保存时只是使用相同的“id”重写数据,当有多行时会出错,这是我的代码:

模型.py:

类提交者(模型。模型): 提交者=models.ForeignKey(用户) def __unicode__(self): 返回 self.submitter.username 类商店(模型。模型): creator=models.ForeignKey(提交者) name = models.CharField(_('name'),blank=True,max_length=30) st = models.CharField(_('Street'),blank=True,max_length=30) sub_date = models.DateField(_('访问日期'),) def __str__(self): return u'%s-%s-%s'%(self.creator,self.name,self.sub_date)

views.py:

def StoreSave(请求): 如果 request.method == 'POST': 表单 = StoreForm(request.POST) 如果 form.is_valid(): 提交者,虚拟= Creator.objects.get_or_create(creator=request.user) 存储,创建 = Store.objects.get_or_create( 提交者=提交者 ) store.name = form.cleaned_data['name'] store.st = form.cleaned_data['st'] store.visit_date = form.cleaned_data['visit_date'] 存储.保存() return HttpResponseRedirect('/user/%s/' % request.user.username) 别的: 形式 = StoreForm() 变量= RequestContext(请求, “形式”:形式 ) return render_to_response('store/create_store.html', variables)

【问题讨论】:

【参考方案1】:

如果要创建新行,请创建它。 :-) 喜欢

store = Store(submitter=submitter,
              name=form.cleaned_data['name'],
              st=form.cleaned_data['st'],
              store.visit_date=form.cleaned_data['visit_date'])
store.save()

现在您使用get_or_create 方法尝试查找具有给定参数的行,这就是您更新它的原因。而且这个方法在多行的时候会报错,是的,这是它的正常行为。

顺便说一句,最好将此保存代码放在表单的方法中(例如save)。

P。 S. 刚刚注意到您的模型中没有 visit_date 字段,我认为您的意思是 sub_date

【讨论】:

以上是关于保存表单数据会重写同一行的主要内容,如果未能解决你的问题,请参考以下文章

C# 保存文件 - (删除并重写?)

Delphi 打印使用文件重写功能

方法重写

重载重写

第一个表单提交插入行后续提交更新同一行

方法的重写