我不知道如何保存创建新行的表单数据,保存时只是使用相同的
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)
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)
如果要创建新行,请创建它。 :-) 喜欢
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
。
您可以简单地使用
get_or_create
而不是使用
create
Store.objects.create(
submitter=submitter,
name=form.cleaned_data['name'],
st=form.cleaned_data['st'],
visit_date=form.cleaned_data['visit_date']
)
有关差异的更多信息,请参阅 Django Model() 与 Model.objects.create()