2011-05-05 49 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