2011-05-05 45 views
2

我无法弄清楚如何保存我的表单数据创建一个新的行,保存时只是使用相同的'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)

回答

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

+0

谢谢很好的解释! – user739030 2011-05-06 18:58:48