保存表单数据重写同一行
我不知道如何保存创建新行的表单数据,保存时只是使用相同的“id”重写数据,并在有多行时出现错误,这是我的代码:
models .py:
class Submitter(models.Model): submitter=models.ForeignKey(User) def __unicode__(self): return self.submitter.username class Store(models.Model): creator=models.ForeignKey(Submitter) name = models.CharField(_('name'),blank=True,max_length=30) st = models.CharField(_('Street'),blank=True,max_length=30) sub_date = models.DateField(_('Visit Date'),) def __str__(self): return u'%s-%s-%s'%(self.creator,self.name,self.sub_date)
视图.py:
def StoreSave(request): if request.method == 'POST': form = StoreForm(request.POST) if form.is_valid(): submitter, dummy= Creator.objects.get_or_create(creator=request.user) store, created = Store.objects.get_or_create( submitter=submitter ) store.name = form.cleaned_data['name'] store.st = form.cleaned_data['st'] store.visit_date = form.cleaned_data['visit_date'] store.save() return HttpResponseRedirect('/user/%s/' % request.user.username) else: form = StoreForm() variables = RequestContext(request, { 'form': form }) return render_to_response('store/create_store.html', variables)
i can't figure out how to save my form data creating a new row, when saving it just rewrites the data using the same 'id' and trhows me an error when there are multiple rows, this is my code:
models.py:
class Submitter(models.Model): submitter=models.ForeignKey(User) def __unicode__(self): return self.submitter.username class Store(models.Model): creator=models.ForeignKey(Submitter) name = models.CharField(_('name'),blank=True,max_length=30) st = models.CharField(_('Street'),blank=True,max_length=30) sub_date = models.DateField(_('Visit Date'),) def __str__(self): return u'%s-%s-%s'%(self.creator,self.name,self.sub_date)
views.py:
def StoreSave(request): if request.method == 'POST': form = StoreForm(request.POST) if form.is_valid(): submitter, dummy= Creator.objects.get_or_create(creator=request.user) store, created = Store.objects.get_or_create( submitter=submitter ) store.name = form.cleaned_data['name'] store.st = form.cleaned_data['st'] store.visit_date = form.cleaned_data['visit_date'] store.save() return HttpResponseRedirect('/user/%s/' % request.user.username) else: form = StoreForm() variables = RequestContext(request, { 'form': form }) return render_to_response('store/create_store.html', variables)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果要创建新行,请创建它。 :-) 就像
现在您使用
get_or_create
方法尝试查找具有给定参数的行,这就是您更新它的原因。当存在多行时,此方法会引发错误,是的,这是它的正常行为。顺便说一句,最好将此保存代码放在表单的方法中(例如
save
)。PS刚刚注意到您的模型中没有
visit_date
字段,我认为您的意思是sub_date
。If you want to create a new row, create it. :-) Like
Now you use
get_or_create
method which tries to find a row with given parameters, so that's why you updating it. And this method throws an error when there are multiple rows, yes, it's its normal behavior.By the way it's better to place this saving code in form's method (
save
for example).P. S. Just noticed you don't have
visit_date
field in your model, I think you meantsub_date
.您可以简单地使用
create
而不是使用get_or_create
可以找到有关差异的更多信息Django Model() 与 Model.objects.create()
Instead of using
get_or_create
you can simply usecreate
More information about the differences can be found Django Model() vs Model.objects.create()